允许用户 "GRANT SELECT" 而不让他们成为管理员或授予他们 CONTROL 权限

Letting users "GRANT SELECT" without making them admins or giving them CONTROL permission

背景资料: 我在 SSMS 中管理一个数据库。我是唯一的管理员。我有用户创建表,然后他们想将这些表的 select 权限授予其他用户。但他们不允许这样做,因为他们不是管理员或对架构没有 CONTROL 权限。

问题: 作为 SSMS 数据库管理员,我如何让用户将他们创建的表的 SELECT 授予其他用户,而不让他们成为管理员或授予他们 CONTROL 权限?

我只会让用户按照以下方式在他们自己的模式中创建一个 table(SSMS 语法可能不同,这只是为了说明):

create table select_access (
    table_name varchar[50],
    user_name varchar[50],
    is_active varchar
)

然后 运行 定期(例如,每五分钟或十分钟)进行管理工作,并为每个适用的用户检查 table.

中的条目

如果 table 不是 的条目当前具有权限(is_active 设置为 Y),则授予权限.如果 table 的条目当前 具有 权限(is_active 设置为 N),请删除权限。

这样一来,他们就可以完全控制 table 的 select 权限,而无需您参与。

要共享 table,他们只需创建它,为他们想要与之共享的每个用户添加条目到 select_access,然后等待你的工作到 运行。

要禁用,他们只需将 is_active 字段设置为 N 以供他们想要撤销其访问权限的用户使用,然后再次等待您的工作 运行。

使用is_active只是为了让您的生活更轻松,因为您唯一需要的信息来源就是table。

可以 通过让他们删除给定 user/table 的行来让它变得更聪明,但是你必须处理 table 他们的所有 table 可能已授予访问权限但不再在 select_access.

中具有条目

只需确保他们授予权限的任何 table 是 他们的 模式中的 table,而不是系统 table 中的一个 table :-)