Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Here is the situation I have inherited:

  1. We have approximately 10 websites (Asp.net web forms) that each have their own database.
  2. Each of these databases houses some site specific data, and each has some form of a user table that will map to what is called a User Service.
  3. The User Service is just another website that has a database with one table (User) that have about 3 different unique identifiers for a user: a UserId guid, an internal desktop application id (third party app, needed to map back to it), and a username.
  4. On all the different websites the databases have the User table, sometimes called Person, or Student, or whatever else, and they are inconsistent in which UserService.User.[IdentifyingColumn] they map to.

The Problem:

It is getting to a point where these application are now needing to share some data with each other, and I see that need increasing as the departments are streamlined even more. With this current set up, it is a lot of hoop jumping to get the right UserId column to match to the right UserId column in the UserService.

Confused yet? Me too..

The Question:

How to approach correcting the issue? I have a few different ideas, some I like more than others, but in order to implement them I need some solid benefits I can bring up to the head of IT, as well as justify the programming time taken for the re-write.

Idea 1: Create a true intranet application. One web application with one database. This way they all live in the same project, and sharing data between the various departments is very simple and quick.

Idea 2: Create a "Master Key" identifying field that will be the end all to identify a user. Make this key available on each database and so there will not be any odd mapping and the various sites can talk to each other. To me this one solves one problem, mapping each db to the next one. It is still very fragmented and there is very little code re-use.

Idea 3: Work with it in the current form trying to continue the present fashion of many small databases and sites.

Which of the above options would you suggest, and why?

share|improve this question
    
"...any ideas? ...Let the arguing commence..." hm consider taking a look at site tour page. "Programmers is all about getting answers. It's not a discussion forum. There's no chit-chat..." –  gnat Mar 13 '13 at 16:11
    
perhaps that was worded poorly. Any answer to this question is going to be opinion/experience based, so I am not expecting a single correct answer. regarding the link reference, it say "Programmers is a question and answer site for professional programmers interested in conceptual questions about software development." I believe this falls under a conceptual question about software development, no? –  davidisawesome Mar 13 '13 at 16:15
1  
the way I see it, your question is fairly OK topic-wise; its only problem is polling for opinions and inviting discussion - which is prohibited per the page you just studied. Consider editing the question to drop that problematic part off –  gnat Mar 13 '13 at 16:18
add comment

4 Answers

up vote 3 down vote accepted

Single Sign On is an excellent idea. Just so you know, you don't necessarily need to use a specific technology, such as Active Directory, WIF or OAuth. You can implement it with just ASP.NET forms auth. Here's how you do it:

Selling it to the head of IT

  1. Don't make it just about developer happiness, there's a significant user happiness benefit of SSO.
  2. Take your current workload and project the time required to keep mucking with an imperfectly architected system over a year. Compare that with the time required to do a re-write. Most of the time, if it breaks even after a year, it's a good trade.

Deciding on How

  1. Figure out the most common way users are identified, (such as AD name, or email address) and try to centralize on that - it should reduce the scope of the re-write.
  2. Once you have the best key defined, pick a technology or method that leverages that.

Random Tips from my experience

  1. I've had the least friction with OAuth. Mainly because we used google apps, so everyone already had a corporate google account.
  2. Windows Authentication has problems depending on if it's set up with NTLM or Kerberos - I had a particular problem with NTLM over a VPN.
  3. ADFS was just too much hassle to get working correctly for anyone outside of our domain, it really wasn't worth it.

To keep your application maintainable, I would make the configuration as simple as possible. To your question about the separate databases, if they don't buy you anything by being separate, reduce the complexity and merge them. Since they are an intranet, I'm assuming they won't ever be deployed separately.

share|improve this answer
add comment

The scenario you describe is a perfect match for a Single Sign On service. There are several paths you can follow to a solution:

  • You mention that this is for an Intranet. Assuming you are using Windows Server for security, you have everything you need in place for a Single Sign-On solution. Your applications can use Windows Authentication and the users on the Domain will automatically be logged in once they navigate to your site.
  • OAuth is another option for creating the infrastructure you mentioned (one application provides information to another based on trust established by an Identity Provider). Again, Microsoft provides an OAuth solution called Windows Identity Foundation (WIF) that provides the infrastructure for what's called "Claims Aware" applications.
  • Windows Azure Access Control Service/Active Directory is an option if you see the need to expose your application to the public. You'll even be able to configure your app to accept logins from third party providers like facebook, Windows Account (formerly live ID) and Twitter.

Using these as a foundation for your identity management, will allow you to focus more on the important parts of your application.

share|improve this answer
add comment

Assuming a Windows domain environment, Windows authentication would be by far the most sensible way to go.

Unless the sites and databases are all very small, I would avoid having 1 merged site/database for all and keep the sites all separate for a couple of reasons:

  • avoid downtime for all systems if you only need to change one system
  • different teams can work in isolation on different apps
share|improve this answer
    
I should note that all the sites and databases are very small. I thought about different teams working on different areas, and that is definitely something to consider in the long run, but as of now it is just one dude responsible for all the development. –  davidisawesome Mar 13 '13 at 16:48
add comment

I believe you are using old RDBMS Database(like sql 2008)

i would suggest you to go for ORDBMS(Oracle 10g or 111g) which can work more efficiently specially for these types of large amount of data using single instance for multiple database that can share data across.

You can share other table data using *Object_User.table_name* in your own Table all those database would share one instance (connection) as a single SID service.

This way You can connect with any dataabse using a single connection. for further research visit =
Oracle website Oracle website for multiple database or reply for further discussion....

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.