2011-08-03 40 views
0

我正在使用MSSQL 2008 R2。我有一个特殊的数据库,它在恢复时可以从SQL Management Studio的每个人都可以访问。通过使用以下SQL语句,我发现Public服务器角色已被授予此数据库的连接权限。撤销公共角色的连接权限

use db_mydb 
SELECT * 
    FROM sys.database_permissions 
WHERE grantee_principal_id = (SELECT principal_id 
           FROM sys.server_principals 
           WHERE name ='public') 

与此查询是下面

0 DATABASE 0 0 2 1 CO CONNECT G GRANT

的结果是否有任何变通撤销此权限吗?

回答

0

我对这个解决方案之间无共同的列创建一个空的数据库。然后使用生成脚本对表格,视图和存储的执行程序进行脚本编写。然后使用导入数据选项导入数据。所有这些都可以使用Micosoft SQL Management Studio来完成。

+0

这意味着在两台服务器上都设置了一些登录*并且用户也存在。所以在还原时,安全性会自动授予。正如我所提到的,与公众无关。您可以在2 sys.xxx_principals视图中找到哪些使用sid列 – gbn

+0

数据库没有任何用户 –

0

一个正确的方式将

  • 运行DROP用户数据库
  • 运行的所有用户DENY CONNECT TO这些用户

做公共

不乱您的代码也会误导您:

  • 服务器级别的公共角色无关的数据库层次的公共角色
  • sys.database_permissions.grantee_principal_idsys.database_principals
  • 对于角色,有sys.database_permissions/sys.database_principalssys.server_principals
+0

感谢您的帖子,我的问题是,这个特定的数据库没有任何用户访问它,但是可以访问。因此我不能做类似 'use db_test;拒绝连接到TestUser;' 的确,我确实被我的代码误导了。认为应该看起来更像 '使用db_test; select * from sys.database_permissions where grantee_principal_id = (SELECT principal_id from sys.database_principals where name ='public');' –

+0

我不想搞乱公共角色。在从SQL 2000迁移到SQL 2008之前,似乎它已经被修改了,我在这里要做的是恢复“默认”权限。 –

+0

没有“默认”权限。连接的用户必须是系统管理员或者他们已经可以访问(例如,组/登录位于旧服务器和新服务器上) – gbn