如何在sqlcmd中创建一个范围为一个特定用户的模式?我需要单独添加明确的拒绝规则吗?



我正在看文档,似乎无法弄清楚如何使用通配符或覆盖权限而不做单独的deny语句

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

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

是您可以使用的方法。您可以创建一个角色,该角色将对模式具有必要的权限,因此将来无论将什么对象放置到该模式中,该角色都可以访问它们:

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]

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

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

然而,在大多数情况下,你不希望这样。

相关内容

最新更新