我试图给权限(SQL 2005)数据库应用程序基于AD组。 总体思路是要求用户拥有“app_users”的成员资格来查看任何内容,而其他用户组的成员资格可以让他们对该组进行写入访问。 “app_customers”为客户模块提供写入权限,为销售提供“app_sales”等。
我在下面列举了一个例子:
user1:app_users的AD成员
user2:app_users,app_customers的AD成员
对于dbo.customers表:
APP_USERS
– 授予:select权限
– 拒绝:插入,更新,删除
app_customers
– 授予:select权限
– 授予:插入,更新,删除
我期望user1能够查看dbo.customers表,但不会被允许修改任何东西(插入/更新/删除) – 哪些工作。 同样,我期望user2能够查看和修改dbo.customers表,因为它们是app_customers的成员。
然而,这种情况并非如此。 相反,与user1一样,user2被拒绝任何修改。 如果发生冲突,我似乎还记得有关拒绝许可获胜的一些事情,但从我处理这些事情起,实际上已经太久了。
我正在以正确的方式进行吗?
拒绝将总是重写授予。 您需要撤消对应用程序用户的拒绝权限。 如果用户没有权限,则不需要拒绝权限,除非您不希望他们拥有该表的权限。
select sys.schemas.name 'Schema', sys.objects.name Object, sys.database_principals.name username, sys.database_permissions.type permissions_type, sys.database_permissions.permission_name, sys.database_permissions.state permission_state, sys.database_permissions.state_desc, state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE LATIN1_General_CI_AS from sys.database_permissions join sys.objects on sys.database_permissions.major_id = sys.objects.object_id join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id join sys.database_principals on sys.database_permissions.grantee_principal_id = sys.database_principals.principal_id order by 1, 2, 3, 5