问题描述
背景信息: 我在SSMS中管理数据库。我是唯一的管理员。我让用户创建表,然后他们想要向其他用户授予对这些表的选择权限。但是由于他们不是管理员或对架构没有CONTROL权限,因此不允许他们这样做。
问题: 作为SSMS数据库管理员,我如何让用户将他们创建的表上的SELECT授予其他用户,而无需授予他们管理员或控制权限?
解决方法
我只是让用户按照以下方式在自己的架构中创建一个表(SSMS语法可能有所不同,这只是为了说明):
create table select_access (
table_name varchar[50],user_name varchar[50],is_active varchar
)
然后定期运行一个管理作业(例如,每五或十分钟运行一次),并针对每个适用的用户检查该表中的条目。
如果存在一个表 not 的条目当前没有权限(将is_active
设置为Y
),则授予该权限。如果当前具有 权限的表中有一个条目(is_active
设置为N
),请删除该权限。
这样,他们可以完全控制自己表上的选择权限,而无需您介入。
要共享一个表,他们只需创建一个表,就向每个要与之共享表的用户添加条目到select_access
,然后等待作业运行。
要禁用,他们只需将其要撤消访问权限的用户的is_active
字段设置为N
,然后再次等待您的作业运行。
使用is_active
只是为了让您的生活更轻松,因为您唯一需要的信息源就是表格。
您可以让他们删除给定用户/表的行,从而使他们变得更聪明,但是您必须处理表和可能已授予访问权限,但不再在select_access
中有条目。
只要确保他们授予权限的任何表都是其模式中的表,而不是系统表之一:-)