sql-server - 如何在 sqlcmd 中创建一个范围为一个特定用户的模式?我需要单独添加显式拒绝规则吗?
问题描述
我正在查看文档,似乎无法弄清楚如何在不做个别拒绝声明的情况下使用通配符或一揽子许可来做到这一点
解决方案
假设一个真实的场景,当你最可能需要:
- 多个用户需要相同级别的访问权限;
- 用户无法更改或删除数据库中的对象,例如表。
这是您可以使用的方法。您可以创建一个角色,该角色将在架构上拥有必要的权限,因此将来将任何对象放入该架构中,该角色都可以访问它们:
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
但是,在大多数情况下,您不希望这样。
推荐阅读
- node.js - 当我上传 html 文件时 Cheerio 不起作用
- python - 有没有办法在 Python 中链接多个 if 语句,以便它们同时运行?
- tensorflow - 当损失再次开始上升时,这意味着什么?
- mysql - Mysql json列约束错误(按json深度)
- python - 制作可以使用 Python 更改 .DOCX 元数据的应用程序
- hugo - Hugo 显示帖子目录而不是最近的帖子
- flutter - 当孩子和反馈相同时如何防止在可拖动的内部重建
- angular - 自定义模块内的角度嵌套组件
- javascript - 它只有两行程序,控制台显示错误“Uncaught TypeError: btn.addEventListener is not a function”
- mysql - 加入来自另一个表的列数