【发布时间】:2017-02-20 14:57:47
【问题描述】:
我不是 db_datareader 数据库角色的成员,但我仍然可以对表进行选择操作。在什么情况下需要将用户添加到该角色? 不成为 db_datareader 的成员,怎么可能做选择操作?
【问题讨论】:
标签: sql-server
我不是 db_datareader 数据库角色的成员,但我仍然可以对表进行选择操作。在什么情况下需要将用户添加到该角色? 不成为 db_datareader 的成员,怎么可能做选择操作?
【问题讨论】:
标签: sql-server
如果您是另一个角色的成员,并且为该对象授予了select,您可以进行选择。 db_datareader 是一个固定角色,它绕过选择授权(您不能为具有 db_datareader 的用户撤销选择)。
【讨论】:
select * from sys.user_token,以查看您在数据库中属于哪些角色。这可能提供足够的线索!
SELECT coalesce(Obj.type_desc, class_desc) as Type, coalesce(Obj.name, db_name()) AS What, [Perm].state_desc, [Perm].permission_name, who.name AS who FROM sys.database_permissions AS [Perm] INNER JOIN sys.database_principals AS who ON [Perm].grantee_principal_id = who.principal_id LEFT OUTER JOIN sys.all_objects AS Obj ON [Perm].major_id = Obj.object_id WHERE ([Perm].major_id >= 0) and (Obj.is_ms_shipped = 0 or class_desc = 'DATABASE') order by class, type, who.name