如何在sqlcmd中创建指定用户专属的schema?是否需要单独添加显式deny规则?
问题解答
核心结论
不需要为其他用户单独逐条添加显式DENY规则。SQL Server的权限体系遵循「未显式授予即默认无权限」的原则,只要确保没有其他角色/权限继承给普通用户该schema的访问权限,仅给目标用户单独授权即可实现需求。
具体实现步骤(sqlcmd环境可直接执行)
- 切换到目标数据库(替换
<你的数据库名>为实际业务库名)
USE <你的数据库名>; GO
- 创建指定schema(示例schema名为
LimitedSchema,可替换为自定义名称)
CREATE SCHEMA LimitedSchema; GO
- 回收public角色在该schema上的所有默认权限,避免public角色的继承权限给所有用户开放访问
REVOKE ALL ON SCHEMA::LimitedSchema FROM public; GO
- 给目标用户授予对应权限(示例用户名为
TargetUser,可按需调整权限范围,比如仅需要查询权限就把ALL改为SELECT)
GRANT ALL ON SCHEMA::LimitedSchema TO TargetUser; GO
特殊场景说明
如果你的数据库存在自定义的全局角色,已经预先给所有普通用户授予了全域的schema访问权限,此时只需要给该自定义角色做一次REVOKE即可,不需要逐用户处理:
REVOKE ALL ON SCHEMA::LimitedSchema FROM <自定义全局角色名>; GO
特殊提醒:非必要不要随意使用DENY规则,DENY优先级高于所有GRANT,一旦给public角色添加了该schema的DENY权限,普通用户默认会被拒绝访问。如果你的业务必须保留全域权限授予(比如必须给所有用户保留数据库级别的SELECT权限),可以按以下规则配置,单独给目标用户开放的权限会覆盖public角色的DENY限制:
DENY ALL ON SCHEMA::LimitedSchema TO public; GO GRANT ALL ON SCHEMA::LimitedSchema TO TargetUser; GO
内容的提问来源于stack exchange,提问作者shan
相关产品推荐
相关产品推荐

