允许用户“ GRANT SELECT”,而无需让他们成为管理员或给予他们CONTROL权限

问题描述

背景信息: 我在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中有条目。

只要确保他们授予权限的任何表都是模式中的表,而不是系统表之一:-)