NHibernate Forge
The official new home for the NHibernate for .NET community

Dynamically change user info in connection string

Wiki Page Hierarchy

Pages

Page Details

First published by:
oorduz
on 11-28-2008
Last revision by:
John Davidson
on 09-07-2011
3 people found this article useful.
Article
Comments (5)
History (6)
100% of people found this useful

Dynamically change user info in connection string

In some cases our clients has to use the same database user id in each connection, so they can use audit and security features of their database system (and their DBAs will be happy [:)]).

To do that in Nh We can use the ConnectionProvider facility. Just derive a class from the standard DriverConnectionProvider class:

public class DynamicConnectionProvider : DriverConnectionProvider
{
    private string _connectionString;
    public override void Configure(IDictionary<string, string> settings)
    {

        // Connection string in the configuration overrides named connection string
        if (!settings.TryGetValue(NHibernate.Cfg.Environment.ConnectionString,out _connectionString))
    _connectionString = GetNamedConnectionString(settings);

        if (_connectionString == null)
        {
            throw new HibernateException("Could not find connection string setting (set " 
                + NHibernate.Cfg.Environment.ConnectionString + " or " 
                + NHibernate.Cfg.Environment.ConnectionStringName + " property)");
        }
        ConfigureDriver(settings);
    }

This is necessary because the original connection string is private, but just copy the code from base method.

The real magic is in "ConnectionString" property, it is called when nh has to connect in a Session. You have to override it so you can make the changes you need. 

protected override string ConnectionString
{
    get { return FixConnectionString(_connectionString); }
}

In this case FixConnectionString read the user info from some environment variable and inject it in the connection string.

Finally configure NH to use the ConnectionProvider:

            <property name="connection.provider">
                MyAssembly.DynamicConnectionProvider, MyAssembly
            </property>

Some useful articles here and here

Recent Comments

By: David Simpson Posted on 12-28-2011 3:08

I am thoroughly convinced in this said post. I am currently searching for ways in which I could enhance my knowledge in this said topic you have posted here. It does help me a lot knowing that you have shared this information here freely. I love the way the people here interact and shared their opinions too. I would love to track your future posts pertaining to the said topic we are able to read.

www.mydivineintentions.com

By: sarah5322 Posted on 10-29-2011 23:49

I absolutely love this website. Maybe you could let me know how I can go about keeping up to date with it? By the way I found your website through Bing

www.housesforsaleincenturion.co.za

www.furnitureremovals.org.za

www.howcanigettallerguide.com

www.getsmokelesscigarettes.com

www.bestwaytoloseweightguide.net

By: David Simpson Posted on 10-22-2011 15:33

This post is useful and helpful. Most people will definitely assert that everything in your blog site is nice. If you maintain publishing educational content on your online site, often there is a higher opportunity that lots of visitors will go to your blog site.

For Salt Free Water Softener

www.ecowatersandiego.com/.../salt-free-water-softener-next-scalestop

By: sarah5322 Posted on 10-03-2011 23:03
100% of people found this useful
By: sarasramvel Posted on 05-15-2009 5:43
100% of people found this useful

Its a useful way to customize the connection provider.... but in my case i need to establish the connection with the given username and password into oracle. The users schema won't have any objects... but internally i need to switch to a specific schema in oracle to access the objects..... username and password is used for authentication purpose only... and internally using oracle roles this connected user will have access to the specific schema..... so everytime i need to establish the connection and need to run a alter session script to switch the working schema..... is there any other better way to do the same... pls. advise.....

View All
Powered by Community Server (Commercial Edition), by Telligent Systems