与集成安全性连接时,限制对SQL Server 2012上的一个数据库的访问

时间:2013-06-05 15:51:19

标签: sql-server tomcat

我使用Tomcat7和SQL Server 2012。

我在SQL Server上运行了两个数据库,一个名为mydb1,一个名为mydb2。两个数据库几乎完全相同,但后者用于测试。

以下是web.xml连接字符串

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/mydb1" type="javax.sql.DataSource" auth="Container"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" initialSize="30"
            maxActive="100"
        url="jdbc:sqlserver://localhost:1433;database=mydb1;integratedSecurity=true;"
            />

<Resource name="jdbc/mydb2" type="javax.sql.DataSource" auth="Container"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" initialSize="30"
            maxActive="100"
        url="jdbc:sqlserver://localhost:1433;database=mydb2;integratedSecurity=true;"
            />

由于我正在使用integratedSecurity进行连接,有什么方法可以限制第一个连接查看第二个数据库,反之亦然。

换句话说:当连接第一个连接时,我是否可以阻止代码SELECT * from mydb2.USERS运行。同样,当连接第二个连接时,我是否可以阻止代码SELECT * from mydb1.USERS运行。

1 个答案:

答案 0 :(得分:1)

安全:不可以。您使用SSPI进行身份验证的唯一方法(即“Windows身份验证”)是连接过程的标识。如果两个连接从同一进程连接,那么它们是无法区分的。如果它们无法区分,则不能使用GRANT / DENY / REVOKE。

如果您正在寻找不安全的东西(例如,阻止意外使用错误的数据库),那么您可以依赖APP_NAME()。强调不安全,app_name只是连接字符串中的一个设置,可以被任何人欺骗。

共享测试和生产数据库主机(将运行测试影响生产结果时间?)是不寻常的,而共享测试和生产客户端(您的Tomcat)更是如此。