【发布时间】:2009-03-10 20:00:24
【问题描述】:
我有以下 T-SQL 来显示授予我的 SQL Server 2005 上的主体的所有权限:
select dp.NAME AS principal_name, --1
dp.type_desc AS principal_type_desc, --2
o.NAME AS object_name, --3
p.permission_name, --4
p.state_desc AS permission_state_desc --5
from sys.database_permissions p
left OUTER JOIN sys.all_objects o
on p.major_id = o.OBJECT_ID
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name, object_name
结果显示 public 并授予 SELECT:
1 2 3 4 5
...
public DATABASE_ROLE system_views SELECT GRANT
....
我认为 object_name system_views 适用于我的数据库 Views|system_views 文件夹中的所有视图。我尝试了以下 T-SQL(只是为了看看它是否再次被 GRANT 工作):
GRANT SELECT ON system_views TO public
我收到错误“找不到对象 'system_views',因为它不存在或您没有权限”。我确实以 sa 身份连接 SQL 服务器。
我的问题是如何为公共(用户或主体?)撤销对 system_views 的 SELECT 权限,并在必要时回滚权限。第二个问题是system_views for public的撤销对其他用户是否有副作用?
【问题讨论】:
标签: sql-server sql-server-2005 tsql