メタデータ表示の構成Metadata Visibility Configuration

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

メタデータの表示は、ユーザーが所有するセキュリティ保護可能なリソース、またはそのユーザーが権限を許可されているセキュリティ保護可能なリソースに制限されています。The visibility of metadata is limited to securables that a user either owns or on which the user has been granted some permission. たとえば、次のクエリを実行すると、ユーザーがテーブル myTableに対する SELECT または INSERT 権限を許可されている場合は、1 行が返されます。For example, the following query returns a row if the user has been granted a permission such as SELECT or INSERT on the table myTable.

SELECT name, object_id  
FROM sys.tables  
WHERE name = 'myTable';  
GO  

ただし、ユーザーが myTableでの権限を許可されていない場合は、空の結果セットが返されます。However, if the user does not have any permission on myTable, the query returns an empty result set.

メタデータ表示の構成のスコープと影響Scope and Impact of Metadata Visibility Configuration

メタデータ表示の構成は、次のセキュリティ保護可能なメタデータにのみ適用されます。Metadata visibility configuration only applies to the following securables.

カタログ ビューCatalog views データベース エンジンDatabase Engine sp_help ストアド プロシージャ *sp_help* stored procedures
メタデータ公開組み込み関数Metadata exposing built-in functions 情報スキーマ ビューInformation schema views
互換性ビューCompatibility views 拡張プロパティExtended properties

メタデータ表示の構成は、次のセキュリティ保護可能なメタデータには適用されません。Metadata visibility configuration does not apply to the following securables.

ログ配布システム テーブルLog shipping system tables SQL ServerSQL Server エージェント システム テーブル Agent system tables
データベース メンテナンス プラン システム テーブルDatabase maintenance plan system tables バックアップ システム テーブルBackup system tables
レプリケーション システム テーブルReplication system tables レプリケーション ストアド プロシージャと SQL ServerSQL Server エージェントの sp_help ストアド プロシージャReplication and SQL ServerSQL Server Agent sp_help stored procedures

メタデータへのアクセスを制限すると、次のような影響があります。Limited metadata accessibility means the following:

  • メタデータへの パブリック なアクセスを前提とするアプリケーションは機能しません。Applications that assume public metadata access will break.

  • システム ビューへのクエリを実行しても、行のサブセットまたは空の結果セットしか返されないことがあります。Queries on system views might only return a subset of rows, or sometimes an empty result set.

  • OBJECTPROPERTYEX などのメタデータ生成組み込み関数を実行すると、NULL 値が返されることがあります。Metadata-emitting, built-in functions such as OBJECTPROPERTYEX may return NULL.

  • データベース エンジンDatabase Engine sp_help ストアド プロシージャを実行しても、行のサブセットまたは NULL 値しか返されないことがあります。The データベース エンジンDatabase Engine sp_help stored procedures might return only a subset of rows, or NULL.

ストアド プロシージャやトリガーなどの SQL モジュールは、呼び出し元のセキュリティ コンテキストで実行されるので、メタデータへのアクセスが制限されます。SQL modules, such as stored procedures and triggers, run under the security context of the caller and, therefore, have limited metadata accessibility. たとえば次のコードでは、ストアド プロシージャから、呼び出し元に権限のないテーブル myTable のメタデータへのアクセスが試行されると、空の結果セットが返されます。For example, in the following code, when the stored procedure tries to access metadata for the table myTable on which the caller has no rights, an empty result set is returned. 以前のリリースの SQL ServerSQL Serverでは行が返されます。In earlier releases of SQL ServerSQL Server, a row is returned.

CREATE PROCEDURE assumes_caller_can_access_metadata  
BEGIN  
SELECT name, id   
FROM sysobjects   
WHERE name = 'myTable';  
END;  
GO  

呼び出し元でのメタデータの表示を可能にするには、呼び出し元にオブジェクト レベル、データベース レベル、サーバー レベルのいずれかの適切なスコープで VIEW DEFINITION 権限を許可できます。To allow callers to view metadata, you can grant the callers VIEW DEFINITION permission at an appropriate scope: object level, database level or server level. したがって、上記の例では、呼び出し元に myTable に対する VIEW DEFINITION 権限が許可されていると、ストアド プロシージャから行が返されます。Therefore, in the previous example, if the caller has VIEW DEFINITION permission on myTable, the stored procedure returns a row. 詳細については、「GRANT (Transact-SQL)」と「GRANT (データベースの権限の許可) (Transact-SQL)」を参照してください。For more information, see GRANT (Transact-SQL) and GRANT Database Permissions (Transact-SQL).

また、ストアド プロシージャを所有者の資格情報で実行するように変更することもできます。You can also modify the stored procedure so that it executes under the credentials of the owner. プロシージャの所有者とテーブルの所有者が同じ場合は、所有権の継承が適用されます。したがって、プロシージャの所有者のセキュリティ コンテキストにより、 myTableのメタデータにアクセスできます。When the procedure owner and the table owner are the same owner, ownership chaining applies, and the security context of the procedure owner enables access to the metadata for myTable. このシナリオで次のコードを実行すると、メタデータの行が呼び出し元に返されます。Under this scenario, the following code returns a row of metadata to the caller.

注意

次の例で使用するのは、 sys.sysobjects 互換性ビューではなく sys.objects カタログ ビューです。The following example uses the sys.objects catalog view instead of the sys.sysobjects compatibility view.

CREATE PROCEDURE does_not_assume_caller_can_access_metadata  
WITH EXECUTE AS OWNER  
AS  
BEGIN  
SELECT name, id  
FROM sys.objects   
WHERE name = 'myTable'   
END;  
GO  

注意

EXECUTE AS を使用すると、一時的に呼び出し元のセキュリティ コンテキストに切り替えることができます。You can use EXECUTE AS to temporarily switch to the security context of the caller. 詳細については、「EXECUTE AS (Transact-SQL)」を参照してください。For more information, see EXECUTE AS (Transact-SQL).

メタデータ表示構成の利点と制限事項Benefits and Limits of Metadata Visibility Configuration

メタデータ表示の構成は、セキュリティ計画全体にとって重要な役割を果たします。Metadata visibility configuration can play an important role in your overall security plan. ただし、上級ユーザーや事前に指定されたユーザーが一部のメタデータを強制的に公開できる場合もあります。However, there are cases in which a skilled and determined user can force the disclosure of some metadata. メタデータの権限の配置は、数ある堅牢な防御策の 1 つとして行うことをお勧めします。We recommend that you deploy metadata permissions as one of many defenses-in-depth.

理論上は、クエリで述語の評価の順序を操作することで、エラー メッセージ内にメタデータの生成を強制することも可能です。It is theoretically possible to force the emission of metadata in error messages by manipulating the order of predicate evaluation in queries. このような 試行錯誤による攻撃 は、 SQL ServerSQL Serverに固有のものではありません。The possibility of such trial-and-error attacks is not specific to SQL ServerSQL Server. 関係代数で許可されている結合変換および相互変換に伴う場合もあります。It is implied by the associative and commutative transformations permitted in relational algebra. このリスクは、エラー メッセージで返される情報を制限することで緩和できます。You can mitigate this risk by limiting the information returned in error messages. この方法でメタデータの表示を制限するには、トレース フラグ 3625 を使用してサーバーを起動します。To further restrict the visibility of metadata in this way, you can start the server with trace flag 3625. このトレース フラグは、エラー メッセージで表示される情報の量を制限します。This trace flag limits the amount of information shown in error messages. そのため、この方法を使用することで、メタデータの公開が強制されることを防ぐことができます。In turn, this helps to prevent forced disclosures. その代わりに、エラー メッセージは簡潔になり、デバッグに使用するのは困難になる可能性があります。The tradeoff is that error messages will be terse and might be difficult to use for debugging purposes. 詳細については、「データベース エンジン サービスのスタートアップ オプション」と「トレース フラグ (Transact-SQL)」を参照してください。For more information, see Database Engine Service Startup Options and Trace Flags (Transact-SQL).

次のメタデータは公開を強制されません。The following metadata is not subject to forced disclosure:

  • sys.serversprovider_string列に格納されている値。The value stored in the provider_string column of sys.servers. ALTER ANY LINKED SERVER 権限が許可されていないユーザーには、この列に NULL 値が表示されます。A user that does not have ALTER ANY LINKED SERVER permission will see a NULL value in this column.

  • ストアド プロシージャやトリガーなどのユーザー定義オブジェクトのソース定義。Source definition of a user-defined object such as a stored procedure or trigger. ソース コードは、次のいずれかの条件を満たしている場合のみ表示されます。The source code is visible only when one of the following is true:

    • ユーザーがオブジェクトに対する VIEW DEFINITION 権限を許可されている場合。The user has VIEW DEFINITION permission on the object.

    • ユーザーがオブジェクトに対する VIEW DEFINITION 権限を拒否されておらず、そのオブジェクトに対する CONTROL、ALTER、TAKE OWNERSHIP のいずれかの権限を許可されている場合。The user has not been denied VIEW DEFINITION permission on the object and has CONTROL, ALTER, or TAKE OWNERSHIP permission on the object. 他のすべてのユーザーには NULL 値が表示されます。All other users will see NULL.

  • 次のカタログ ビューの定義列。The definition columns found in the following catalog views:

    sys.all_sql_modulessys.all_sql_modules sys.sql_modulessys.sql_modules
    sys.server_sql_modulessys.server_sql_modules sys.check_constraintssys.check_constraints
    sys.default_constraintssys.default_constraints sys.computed_columnssys.computed_columns
    sys.numbered_proceduressys.numbered_procedures
  • syscomments 互換性ビューの ctext 列。The ctext column in the syscomments compatibility view.

  • sp_helptext プロシージャの出力。The output of the sp_helptext procedure.

  • 情報スキーマ ビューの次の列。The following columns in the information schema views:

    INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITIONINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
  • OBJECT_DEFINITION() 関数OBJECT_DEFINITION() function

  • sys.sql_loginsの password_hash 列に格納された値。The value stored in the password_hash column of sys.sql_logins. CONTROL SERVER 権限が許可されていないユーザーには、この列に NULL 値が表示されます。A user that does not have CONTROL SERVER permission will see a NULL value in this column.

注意

組み込みシステム プロシージャと組み込みシステム関数の SQL 定義は、 sys.system_sql_modules カタログ ビュー、 sp_helptext ストアド プロシージャ、および OBJECT_DEFINITION() 関数を使用すると公開されます。The SQL definitions of built-in system procedures and functions are publicly visible through the sys.system_sql_modules catalog view, the sp_helptext stored procedure, and the OBJECT_DEFINITION() function.

メタデータ表示の一般原則General Principles of Metadata Visibility

次に、メタデータの表示に関して考慮する必要がある一般原則を示します。The following are some general principles to consider regarding metadata visibility:

  • 固定ロールの暗黙の権限Fixed roles implicit permissions

  • 権限のスコープScope of permissions

  • DENY の優先Precedence of DENY

  • サブコンポーネントのメタデータの表示Visibility of subcomponent metadata

固定ロールと暗黙の権限Fixed Roles and Implicit Permissions

固定ロールでアクセスできるメタデータは、それらのメタデータに対応する暗黙の権限によって決まります。Metadata that can be accessed by fixed roles depends upon their corresponding implicit permissions.

権限のスコープScope of Permissions

あるスコープで権限が許可されていると、そのスコープのメタデータと、そのスコープに含まれるすべてのスコープのメタデータを表示できることになります。Permissions at one scope imply the ability to see metadata at that scope and at all enclosed scopes. たとえば、あるスキーマに対する SELECT 権限が許可されると、そのスキーマに含まれるすべてのセキュリティ保護可能なメタデータに対する SELECT 権限がユーザーに許可されることになります。For example, SELECT permission on a schema implies that the grantee has SELECT permission on all securables that are contained by that schema. したがって、あるスキーマに対する SELECT 権限を許可すると、ユーザーはそのスキーマと、スキーマ内のすべてのテーブル、ビュー、関数、プロシージャ、キュー、シノニム、型、および XML スキーマ コレクションのメタデータも表示できます。The granting of SELECT permission on a schema therefore enables a user to see the metadata of the schema and also all tables, views, functions, procedures, queues, synonyms, types, and XML schema collections within it. スコープの詳細については、「権限の階層 (データベース エンジン)」を参照してください。For more information about scopes, see Permissions Hierarchy (Database Engine).

DENY の優先Precedence of DENY

通常、DENY は他の権限よりも優先されます。DENY typically takes precedence over other permissions. たとえば、データベース ユーザーがあるスキーマに対する EXECUTE 権限を許可されていても、そのスキーマ内にあるストアド プロシージャに対する EXECUTE 権限が拒否されている場合は、そのストアド プロシージャのメタデータを表示できません。For example, if a database user is granted EXECUTE permission on a schema but has been denied EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

また、ユーザーがあるスキーマに対する EXECUTE 権限を拒否されている場合は、そのスキーマ内のストアド プロシージャに対して EXECUTE 権限を許可されていても、そのストアド プロシージャのメタデータを表示できません。Additionally, if a user is denied EXECUTE permission on a schema but has been granted EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

もう 1 つの例として、ユーザーがあるストアド プロシージャに対する EXECUTE 権限を許可および拒否されている場合 (さまざまなロールのメンバーシップに属しているとこのような状況が生じます)、DENY が優先されるので、そのストアド プロシージャのメタデータを表示できません。For another example, if a user has been granted and denied EXECUTE permission on a stored procedure, which is possible through your various role memberships, DENY takes precedence and the user cannot view the metadata of the stored procedure.

サブコンポーネントのメタデータの表示Visibility of Subcomponent Metadata

インデックス、CHECK 制約、トリガーなどのサブコンポーネントが表示されるかどうかは、そのサブコンポーネントの親に対する権限によって決まります。The visibility of subcomponents, such as indexes, check constraints, and triggers is determined by permissions on the parent. これらのサブコンポーネントには、権限を許可できません。These subcomponents do not have grantable permissions. たとえば、ユーザーがあるテーブルに対していくつかの権限を許可されていると、そのテーブル、列、インデックス、CHECK 制約、トリガー、およびその他のサブコンポーネントのメタデータを表示できます。For example, if a user has been granted some permission on a table, the user can view the metadata for the tables, columns, indexes, check constraints, triggers, and other such subcomponents.

すべてのデータベース ユーザーがアクセスできるメタデータMetadata That Is Accessible to All Database Users

一部のメタデータは、特定のデータベースのすべてのユーザーがアクセスできる必要があります。Some metadata must be accessible to all users in a specific database. たとえば、ファイル グループには許可できる権限がないので、ファイル グループのメタデータを表示するための権限をユーザーに許可できません。For example, filegroups do not have conferrable permissions; therefore, a user cannot be granted permission to view the metadata of a filegroup. ただし、テーブルを作成できるすべてのユーザーは、ファイル グループのメタデータにアクセスして、CREATE TABLE ステートメントの ON filegroup 句または TEXTIMAGE_ON filegroup 句を使用できる必要があります。However, any user that can create a table must be able to access filegroup metadata to use the ON filegroup or TEXTIMAGE_ON filegroup clauses of the CREATE TABLE statement.

DB_ID() 関数と DB_NAME() 関数で返されるメタデータは、すべてのユーザーが表示できます。The metadata that is returned by the DB_ID() and DB_NAME() functions is visible to all users.

次の表に、 public ロールで表示できるカタログ ビューを示します。The following table lists the catalog views that are visible to the public role.

sys.partition_functionssys.partition_functions sys.partition_range_valuessys.partition_range_values
sys.partition_schemessys.partition_schemes sys.data_spacessys.data_spaces
sys.filegroupssys.filegroups sys.destination_data_spacessys.destination_data_spaces
sys.database_filessys.database_files sys.allocation_unitssys.allocation_units
sys.partitionssys.partitions sys.messagessys.messages
sys.schemassys.schemas sys.configurationssys.configurations
sys.sql_dependenciessys.sql_dependencies sys.type_assembly_usagessys.type_assembly_usages
sys.parameter_type_usagessys.parameter_type_usages sys.column_type_usagessys.column_type_usages

参照See Also

GRANT (Transact-SQL) GRANT (Transact-SQL)
DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
EXECUTE AS 句 (Transact-SQL) EXECUTE AS Clause (Transact-SQL)
カタログ ビュー (Transact-SQL) Catalog Views (Transact-SQL)
互換性ビュー (Transact-SQL)Compatibility Views (Transact-SQL)