属于特定数据库上的 public、db_datareader 和 db_datawriter 角色的域用户 (User1) 在尝试从该数据库上的任何表(包括新创建的测试表)中进行选择时收到以下消息:
The SELECT permission was denied on the object 'table1', database 'database1', schema 'dbo'.
该用户在同一台服务器上的其他几个数据库上工作正常。该用户在数据库或表级别没有被明确拒绝权限(至少我能找到这样的权限)。
我尝试过(但没有成功):
- 删除用户并将其重新映射到数据库
- 将用户分配给 db_owner 角色
- 具体授予数据库和表级别的选择权限
唯一有区别的是将用户设置为 sysadmin 服务器角色 - 但这对于生产来说是不可行的。
我还能怎样解决这个问题?
答案1
最有可能的是,用户是权限被拒绝的组的成员 - 拒绝优先于授予。
运行以下命令查看权限;
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
where major_id = object_id('table1')
and class = 1
是不是你正在使用所有权链,并且击中这个问题?
希望这可以帮助