web-dev-qa-db-ja.com

システム管理者にdbo以外のスキーマにデータを強制的に保存させる方法は?

SQL Server 2016データベースにデータをアップロードするためにGUIツールを使用しています。上記のタスクに使用されているユーザーには、上記のデータを格納するための専用スキーマを作成したsysadmin権限が付与されています。このスキーマは所有されており、デフォルトで上記のユーザーに設定されています。問題は、専用のスキーマではなくdboスキーマに保存されているデータをアップロードするときに、このユーザーからsysadmin privを取り消すことができなかったことです。

Sysadmin privを取り消さずにこの専用スキーマにデータをアップロードする方法を教えてください。

ありがとう

2
Faisal Alinn

sysadmin固定サーバーロールのメンバーがdbo以外のスキーマを使用する唯一の方法は、スキーマ名でオブジェクト名を明示的に修飾することです。

CREATE TABLE MySchema.TableName (...

の代わりに:

CREATE TABLE TableName (...

これを回避する方法はありません。 ALTER USER のドキュメント(「備考」セクションにあります)には、以下についての注記もあります。

????重要

ユーザーがsysadmin固定サーバーロールのメンバーである場合、DEFAULT_SCHEMAの値は無視されます。 sysadmin固定サーバーロールのすべてのメンバーは、dboの既定のスキーマを持っています。

これは、sysadmin固定サーバーロールのメンバーであるログイン(インスタンスレベル)が、すべてのデータベースでdboユーザー(データベースレベル)になるためです。これを確認するには、saであるsysadmin以外のログインとしてログインし、次を実行します。

SELECT SYSTEM_USER AS [Login], CURRENT_USER AS [User];
8
Solomon Rutzky