如何强制系统管理员将数据存储在 dbo 以外的模式中?

Fal*_*inn 2 schema security sql-server role t-sql

我正在使用 GUI 工具在我的 SQL Server 2016 数据库中上传数据。用于上述任务的用户已被授予 sysadmin 权限,我创建了一个专用架构来存储上述数据。这个架构是拥有的,默认为上述用户。问题是,当我上传数据时,它存储在 dbo 模式而不是专用模式中,我无法从该用户那里撤销 sysadmin priv。

请让我知道如何在不撤销 sysadmin priv 的情况下将数据上传到这个专用模式?

谢谢

Sol*_*zky 8

sysadmin固定服务器角色的成员使用非dbo架构的唯一方法是使用架构名称明确限定其对象名称:

CREATE TABLE MySchema.TableName (...
Run Code Online (Sandbox Code Playgroud)

代替:

CREATE TABLE TableName (...
Run Code Online (Sandbox Code Playgroud)

没有办法解决这个问题。ALTER USER的文档(在“备注”部分)甚至有一个注释:

? 重要

如果用户是sysadmin固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。sysadmin固定服务器角色的所有成员的默认架构为dbo.

这很可能是因为作为sysadmin固定服务器角色成员的登录名(实例级)成为dbo所有数据库中的用户(数据库级)。要验证这一点,请以 a 的任何非sa登录名登录sysadmin并执行以下操作:

SELECT SYSTEM_USER AS [Login], CURRENT_USER AS [User];
Run Code Online (Sandbox Code Playgroud)