0

我使用 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运行。

4

1 回答 1

1

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

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

共享测试和生产数据库主机在某种程度上是不寻常的(运行测试会影响生产结果时间吗?),共享测试和生产客户端(您的 Tomcat)更是如此。

于 2013-06-05T15:58:47.353 回答