テーブルとストアドプロシージャを作成できるユーザーアカウントをデータベースに持っています。
このユーザーアカウントがスキーマを作成できるかどうかを確認したい-最初に作成しようとしないで。 (私はITではなく財務の一部です)Schema'sを作成できる場合は、ITに先に進んで作成する許可を求めます。できない場合は、しばらく前に入力したサービスデスクリクエストでITがそれを行うのを待ち続けますsigh
実際に新しいスキーマを作成せずにこれを通知するSSMSで実行できるコマンドはありますか?
このユーザーの権限のスクリーンショットもいくつか撮りました-おそらく答えがあるでしょうか?
編集:以下のSQLServingによって提案されたSQLを実行すると、次の結果が得られます。
UserName is_disabled principal_type_desc class_desc object_name permission_name permission_state_desc
DWReports 0 SQL_USER DATABASE NULL CONNECT GRANT
DWReports 0 SQL_USER OBJECT_OR_COLUMN GetSystemSQLAgentJobList EXECUTE GRANT
このスキーマを作成できないように見えますが、そうですか?
いいえ、それは間違っています。あなたはdb_owner
なので、データベースに必要なすべてを作成できます。メンバーシップのある最初の写真を見てください。
上記の回答のエラーは、特定のユーザーに対して明示的に許可されたアクセス許可のみを考慮していることです。ただし、ユーザーは1000個のロールのメンバーである可能性があり、これらのロールに権限を与えることができます。
あなたのケースでは、データベースを制御する固定データベースロールdb_owner
のメンバーなので、データベース内で何でも実行できます。
データベースでの有効な権限を確認するには、次のコマンドを実行します。
select * from sys.fn_my_permissions(null, 'database');
select HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE SCHEMA');
これにより、すべてのWindowsグループ、ロール、および固定ロールメンバーシップを含むアクセス許可が正しく考慮されます。 GRANTとDENYも正しく考慮されます。
このクエリを実行すると、ユーザーの権限を確認できるはずです(ここでは、sysテーブルへの読み取り権限があることを前提としています)。
SELECT
USER_NAME(dppriper.grantee_principal_id) AS UserName,
sppri.is_disabled,
dppri.type_desc AS principal_type_desc,
dppriper.class_desc,
OBJECT_NAME(dppriper.major_id) AS object_name,
dppriper.permission_name,
dppriper.state_desc AS permission_state_desc
FROM
sys.database_permissions AS dppriper INNER JOIN
sys.database_principals AS dppri
ON dppriper.grantee_principal_id = dppri.principal_id LEFT OUTER JOIN
sys.server_principals AS sppri
ON sppri.sid = dppri.sid
Where USER_NAME(dppriper.grantee_principal_id)='DWReports'