Configuração de visibilidade de metadadosMetadata Visibility Configuration

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

A visibilidade de metadados é limitada aos protegíveis que pertencem a um usuário ou sobre os quais recebeu alguma permissão.The visibility of metadata is limited to securables that a user either owns or on which the user has been granted some permission. Por exemplo, a consulta a seguir retornará uma linha se o usuário recebeu uma permissão SELECT ou INSERT na tabela myTable.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 = N'myTable';  
GO  

Entretanto, se o usuário não possuir nenhuma permissão em myTable, a consulta retornará um conjunto de resultados vazio.However, if the user does not have any permission on myTable, the query returns an empty result set.

Escopo e impacto da configuração de visibilidade de metadadosScope and Impact of Metadata Visibility Configuration

A configuração de visibilidade de metadados apenas se aplica aos seguintes protegíveis.Metadata visibility configuration only applies to the following securables.

Exibições do catálogoCatalog views Mecanismo de Banco de DadosDatabase Engine sp_help stored proceduressp_help stored procedures
Metadados com exposição de funções internasMetadata exposing built-in functions Exibições do esquema de informaçõesInformation schema views
Exibições de compatibilidadeCompatibility views Propriedades estendidasExtended properties

A configuração de visibilidade de metadados não se aplica aos seguintes protegíveis.Metadata visibility configuration does not apply to the following securables.

Tabelas do sistema de envio de logsLog shipping system tables SQL ServerSQL Server Tabelas do sistema do AgentAgent system tables
Tabelas do sistema de plano de manutenção do banco de dadosDatabase maintenance plan system tables Tabelas do sistema de backupBackup system tables
Tabelas do sistema de replicaçãoReplication system tables Replicação e procedimento armazenados do SQL ServerSQL Server Agent sp_helpReplication and SQL ServerSQL Server Agent sp_help stored procedures

Acessibilidade de metadados limitada significa o seguinte:Limited metadata accessibility means the following:

  • Aplicativos que assumem que o acesso de metadados público será interrompido.Applications that assume public metadata access will break.

  • Consultas nas exibições de sistema podem retornar apenas um subconjunto de linhas, ou às vezes um conjunto de resultados vazio.Queries on system views might only return a subset of rows, or sometimes an empty result set.

  • Funções internas, que emitem metadados como em OBJECTPROPERTYEX podem retornar NULO.Metadata-emitting, built-in functions such as OBJECTPROPERTYEX may return NULL.

  • Os procedimentos armazenados de Mecanismo de Banco de DadosDatabase Engine sp_help podem retornar apenas um subconjunto de linhas ou NULL.The Mecanismo de Banco de DadosDatabase Engine sp_help stored procedures might return only a subset of rows, or NULL.

Os módulos SQL, como os procedimentos armazenados e os gatilhos, são executados no contexto de segurança do chamador e, em consequência, têm acessibilidade limitada aos metadados.SQL modules, such as stored procedures and triggers, run under the security context of the caller and, therefore, have limited metadata accessibility. Por exemplo, no código a seguir, quando o procedimento armazenado tentar acessar os metadados para a tabela myTable na qual o visitante não tem nenhum direito, há retorno de um conjunto de resultados vazio.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. Em versões anteriores do SQL ServerSQL Server, é retornada uma linha.In earlier releases of SQL ServerSQL Server, a row is returned.

CREATE PROCEDURE assumes_caller_can_access_metadata  
BEGIN  
SELECT name, object_id   
FROM sys.objects   
WHERE name = N'myTable';  
END;  
GO  

Você pode conceder aos visitantes uma permissão VIEW DEFINITION, que permita aos visitantes exibir os metadados no escopo apropriado: nível de objeto, nível de banco de dados ou nível de servidor.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. Assim, no exemplo prévio, se o visitante tiver uma permissão VIEW DEFINITION em myTable, o procedimento armazenado retornará uma linha.Therefore, in the previous example, if the caller has VIEW DEFINITION permission on myTable, the stored procedure returns a row. Para obter mais informações, veja GRANT (Transact-SQL) e Permissões de banco de dados GRANT (Transact-SQL).For more information, see GRANT (Transact-SQL) and GRANT Database Permissions (Transact-SQL).

Você também pode modificar o procedimento armazenado de forma a executar com as credenciais do proprietário.You can also modify the stored procedure so that it executes under the credentials of the owner. Quando o proprietário do procedimento e o da tabela forem o mesmo proprietário, o encadeamento de propriedade é aplicável e o contexto de segurança do proprietário do procedimento ativa o acesso aos metadados para 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. Nesse cenário, o seguinte código retorna uma linha de metadados ao chamador.Under this scenario, the following code returns a row of metadata to the caller.

Observação

O exemplo a seguir utiliza a exibição do catálogo sys.objects , em vez da exibição de compatibilidade sys.sysobjects .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, object_id  
FROM sys.objects   
WHERE name = N'myTable'   
END;  
GO  

Observação

Você pode usar EXECUTE AS para alternar temporariamente para o contexto de segurança do chamador.You can use EXECUTE AS to temporarily switch to the security context of the caller. Para obter mais informações, veja EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS (Transact-SQL).

Benefícios e limites da configuração de visibilidade de metadadosBenefits and Limits of Metadata Visibility Configuration

A configuração de visibilidade de metadados pode ter uma função importante em seu plano de segurança global.Metadata visibility configuration can play an important role in your overall security plan. Entretanto, há casos nos quais um usuário habilidoso e determinado pode forçar a divulgação de alguns metadados.However, there are cases in which a skilled and determined user can force the disclosure of some metadata. Recomendamos que você implante permissões para metadados como um dos muitos detalhes de defesa.We recommend that you deploy metadata permissions as one of many defenses-in-depth.

É teoricamente possível forçar a emissão de metadados em mensagens de erro manipulando a ordem de avaliação do predicado nas consultas.It is theoretically possible to force the emission of metadata in error messages by manipulating the order of predicate evaluation in queries. A possibilidade de tais ataques por tentativa e erro não é específica do SQL ServerSQL Server.The possibility of such trial-and-error attacks is not specific to SQL ServerSQL Server. Está implícita nas transformações associativas e comutativas permitidas pela álgebra relacional.It is implied by the associative and commutative transformations permitted in relational algebra. Você pode reduzir esse risco limitando as informações retornadas nas mensagens de erro.You can mitigate this risk by limiting the information returned in error messages. Para restringir ainda mais a visibilidade de metadados desse modo, você pode iniciar o servidor com o sinalizador de rastreamento 3625.To further restrict the visibility of metadata in this way, you can start the server with trace flag 3625. Este sinalizador de rastreamento limita a quantidade de informações mostradas nas mensagens de erro.This trace flag limits the amount of information shown in error messages. Por sua vez, isso ajuda a impedir divulgações forçadas.In turn, this helps to prevent forced disclosures. Em compensação as mensagens de erro serão concisas e será difícil usar para propósitos de depuração.The tradeoff is that error messages will be terse and might be difficult to use for debugging purposes. Para obter mais informações, consulte Opções de inicialização do serviço Mecanismo de Banco de Dados e Sinalizadores de rastreamento (Transact-SQL).For more information, see Database Engine Service Startup Options and Trace Flags (Transact-SQL).

Os metadados a seguir não estão sujeitos a divulgação forçada:The following metadata is not subject to forced disclosure:

  • O valor armazenado na coluna provider_string de sys.servers.The value stored in the provider_string column of sys.servers. Um usuário que não tem permissão ALTER ANY LINKED SERVER verá um valor NULL nessa coluna.A user that does not have ALTER ANY LINKED SERVER permission will see a NULL value in this column.

  • Definição de fonte de um objeto definido pelo usuário como um procedimento armazenado ou gatilho.Source definition of a user-defined object such as a stored procedure or trigger. O código de origem só é visível quando um destes for verdadeiro:The source code is visible only when one of the following is true:

    • O usuário tem permissão VIEW DEFINITION no objeto.The user has VIEW DEFINITION permission on the object.

    • Não foi negada permissão ao usuário em VIEW DEFINITION no objeto e possui permissões em CONTROL, ALTER ou em TAKE OWNERSHIP no objeto.The user has not been denied VIEW DEFINITION permission on the object and has CONTROL, ALTER, or TAKE OWNERSHIP permission on the object. Todos os outros usuários verão NULL.All other users will see NULL.

  • As colunas de definição encontradas nas exibições do catálogo a seguir: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
  • A coluna ctext na exibição de compatibilidade syscomments .The ctext column in the syscomments compatibility view.

  • A saída do procedimento sp_helptext .The output of the sp_helptext procedure.

  • As seguintes colunas nas exibições do esquema de informações: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
  • Função OBJECT_DEFINITION()OBJECT_DEFINITION() function

  • O valor armazenado na coluna password_hash em sys.sql_logins.The value stored in the password_hash column of sys.sql_logins. Um usuário que não tenha a permissão CONTROL SERVER verá um valor NULL nessa coluna.A user that does not have CONTROL SERVER permission will see a NULL value in this column.

Observação

As definições de SQL de procedimentos e funções de sistema internos são publicamente visíveis na exibição do catálogo sys.system_sql_modules , no procedimento armazenado sp_helptext e na função 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.

Princípios gerais de visibilidade de metadadosGeneral Principles of Metadata Visibility

A seguir, alguns princípios gerais para serem considerados relativos à visibilidade de metadados:The following are some general principles to consider regarding metadata visibility:

  • Permissões implícitas de funções fixasFixed roles implicit permissions

  • Escopo das permissõesScope of permissions

  • Precedência em DENYPrecedence of DENY

  • Visibilidade de metadados de subcomponenteVisibility of subcomponent metadata

Funções fixas e permissões implícitasFixed Roles and Implicit Permissions

Os metadados que podem ser acessados através de funções fixas dependem de suas permissões implícitas correspondentes.Metadata that can be accessed by fixed roles depends upon their corresponding implicit permissions.

Escopo das permissõesScope of Permissions

Permissões em um escopo implicam na capacidade de ver os metadados nesse escopo e em todos os escopos inclusos.Permissions at one scope imply the ability to see metadata at that scope and at all enclosed scopes. Por exemplo, a permissão SELECT dentro de um esquema implica que o beneficiado tem permissão SELECT em todos os protegíveis contidos nesse esquema.For example, SELECT permission on a schema implies that the grantee has SELECT permission on all securables that are contained by that schema. A concessão de permissão SELECT em um esquema permite que usuário veja então os metadados do esquema e também todas as tabelas, exibições, funções, procedimentos, filas, sinônimos, tipos e coleções de esquema XML inclusos.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. Para obter mais informações sobre escopos, veja Hierarquia de permissões (Mecanismo de Banco de Dados).For more information about scopes, see Permissions Hierarchy (Database Engine).

Precedência em DENYPrecedence of DENY

DENY normalmente tem precedência sobre outras permissões.DENY typically takes precedence over other permissions. Por exemplo, se um usuário de banco de dados recebeu permissão EXECUTE em um esquema, mas teve a permissão EXECUTE negada em um procedimento armazenado nesse esquema, o usuário não pode exibir os metadados para esse procedimento armazenado.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.

Além disso, se um usuário teve a permissão EXECUTE negada em um esquema, mas recebeu a permissão EXECUTE em um procedimento armazenado nesse esquema, o usuário não pode exibir os metadados para esse procedimento armazenado.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.

Outro exemplo, se um usuário teve permissão EXECUTE concedida e negada em um procedimento armazenado, o que é possível através de suas diversas associações à funções, DENY terá precedência e o usuário não poderá exibir os metadados do procedimento armazenado.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.

Visibilidade de metadados de subcomponenteVisibility of Subcomponent Metadata

A visibilidade de subcomponentes, como índices, restrições de verificação e gatilhos são determinados através de permissões no pai.The visibility of subcomponents, such as indexes, check constraints, and triggers is determined by permissions on the parent. Esses subcomponentes não têm permissões que possam ser concedidas.These subcomponents do not have grantable permissions. Por exemplo, se um usuário recebeu alguma permissão em uma tabela, o usuário poderá exibir os metadados para as tabelas, colunas, índices, restrições de verificações, gatilhos e outros subcomponentes similares.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.

Metadados acessíveis a todos os usuários do banco de dadosMetadata That Is Accessible to All Database Users

Algum metadados devem ser acessíveis a todos os usuários em um banco de dados específico.Some metadata must be accessible to all users in a specific database. Por exemplo, grupos de arquivos não têm permissões que possam ser conferidas; consequentemente, um usuário não pode receber permissão para exibir os metadados de um grupo de arquivos.For example, filegroups do not have conferrable permissions; therefore, a user cannot be granted permission to view the metadata of a filegroup. Entretanto, qualquer usuário que possa criar uma tabela deve poder acessar os metadados de grupo de arquivos para usar filegroup ON ou as cláusulas TEXTIMAGE_ON filegroup da instrução CREATE TABLE.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.

Os metadados retornados pelas funções DB_ID() e DB_NAME() são visíveis para todos os usuários.The metadata that is returned by the DB_ID() and DB_NAME() functions is visible to all users.

A tabela a seguir lista aos exibições do catálogo que são visíveis na função pública .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

Consulte TambémSee Also

GRANT (Transact-SQL) GRANT (Transact-SQL)
DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
Cláusula EXECUTE AS (Transact-SQL) EXECUTE AS Clause (Transact-SQL)
Exibições de catálogo (Transact-SQL) Catalog Views (Transact-SQL)
Exibições de compatibilidade (Transact-SQL)Compatibility Views (Transact-SQL)