首页 > 解决方案 > 如何在 sqlcmd 中创建一个范围为一个特定用户的模式?我需要单独添加显式拒绝规则吗?

问题描述

我正在查看文档,似乎无法弄清楚如何在不做个别拒绝声明的情况下使用通配符或一揽子许可来做到这一点

标签: sql-serversqlcmd

解决方案


假设一个真实的场景,当你最可能需要:

  • 多个用户需要相同级别的访问权限;
  • 用户无法更改或删除数据库中的对象,例如表。

这是您可以使用的方法。您可以创建一个角色,该角色将在架构上拥有必要的权限,因此将来将任何对象放入该架构中,该角色都可以访问它们:

create role SchemaUser_X authorization dbo;
go
create schema Schema_X authorization dbo;
go
-- You can add or remove permissions here, as necessary
grant select, update, delete, insert, execute on schema::Schema_X to SchemaUser_X;
go

之后,您可以将您的用户添加为角色成员:

create user User_X without login; -- Or by your preferred means
go
alter role SchemaUser_X add member User_X;
go
-- Repeat with as many users as need access to [Schema_X]

PS 如果你真的需要让你的用户在他们对应的模式中管理对象,比如创建表、视图、过程等,那么你可以把这些角色变成模式所有者:

create role SchemaUser_X authorization dbo;
go
create schema Schema_X authorization SchemaUser_X;
go
-- Grants are unnecessary as the role has CONTROL permission on schema in this case

但是,在大多数情况下,您不希望这样。


推荐阅读