次の方法で共有


DENY システム オブジェクトのアクセス許可 (Transact-SQL)

適用対象: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric SQL Database

ストアド プロシージャ、拡張ストアド プロシージャ、関数、ビューなどのシステム オブジェクトに対する権限を拒否します。

Transact-SQL 構文表記規則

構文

DENY { SELECT | EXECUTE } ON [ sys. ] system_object TO principal

引数

[ sys. ]

sys修飾子は、カタログ ビューと動的管理ビューを参照している場合にのみ必要です。

system_object

権限を拒否するオブジェクトを指定します。

プリンシパル

権限を取り消すプリンシパルを指定します。

解説

このステートメントを使用すると、SQL Server によってインストールされる特定のストアド プロシージャ、拡張ストアド プロシージャ、テーブル値関数、スカラー関数、ビュー、カタログ ビュー、互換性ビュー、 INFORMATION_SCHEMA ビュー、動的管理ビュー、システム テーブルに対するアクセス許可を拒否できます。 これらの各システム オブジェクトは、リソース データベース (mssqlsystemresource) に一意のレコードとして存在します。 リソース データベースは読み取り専用です。 オブジェクトへのリンクは、すべてのデータベースの sys スキーマのレコードとして公開されます。

既定の名前解決では、修飾子のないプロシージャ名はリソース データベースとして解釈されます。 したがって、 sys 修飾子は、カタログ ビューと動的管理ビューを指定する場合にのみ必要です。

注意事項

システム オブジェクトに対するアクセス許可を拒否すると、それらに依存するアプリケーションが失敗します。 SQL Server Management Studio はカタログ ビューを使用し、カタログ ビューの既定のアクセス許可を変更した場合、期待どおりに機能しない可能性があります。

トリガーとシステム オブジェクトの列に対するアクセス許可の拒否はサポートされていません。

システム オブジェクトに対するアクセス許可は、SQL Server のアップグレード中に保持されます。

システム オブジェクトは、 sys.system_objects カタログ ビューで確認できます。 システム オブジェクトに対する権限は、master データベースのsys.database_permissions カタログ ビューに表示されます。

次のクエリでは、システム オブジェクトの権限に関する情報が返されます。

SELECT *
FROM master.sys.database_permissions AS dp
     INNER JOIN sys.system_objects AS so
         ON dp.major_id = so.object_id
WHERE dp.class = 1
      AND so.parent_object_id = 0;
GO

アクセス許可

CONTROL SERVER 権限が必要です。

次の例では、パブリックEXECUTExp_cmdshellに対するアクセス許可を拒否します。

DENY EXECUTE ON sys.xp_cmdshell TO PUBLIC;
GO