AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 123119
Accepted
Steve Mangiameli
Steve Mangiameli
Asked: 2015-12-08 10:40:42 +0800 CST2015-12-08 10:40:42 +0800 CST 2015-12-08 10:40:42 +0800 CST

Como você GRANT SELECT no banco de dados de recursos ocultos mssqlsystemresource?

  • 772

Eu recebo um erro quando executo esta consulta:

    SELECT 
      dependencies.referencing_id as object_id,
      dependencies.referencing_minor_id as column_id,
      dependencies.referenced_id AS referenced_object_id,
      RTRIM(referenced_objects.type) AS referenced_type
    FROM 
      sys.sql_expression_dependencies AS dependencies
    JOIN sys.objects AS referenced_objects WITH(NOLOCK) ON referenced_objects.object_id = dependencies.referenced_id
    WHERE dependencies.referencing_id != dependencies.referenced_id

Erro :

A permissão SELECT foi negada no objeto 'sql_expression_dependencies', banco de dados 'mssqlsystemresource', esquema 'sys'.

O Login tem associação apenas na função de servidor PUBLIC e concedeu VIEW ANY DATABASE e VIEW ANY DEFINITION. Adicionei um usuário com associação na função de banco de dados PUBLIC para o banco de dados que estou comparando. Presumi que a permissão no nível do servidor seria suficiente, mas estava errado. Fiz isso em um banco de dados 2008R2, além de um banco de dados 2014.

No banco de dados de 2014, também concedi permissão de nível de servidor SELECT ALL USER SECURABLES. O erro persistiu.

Eu concedi o SELECT do usuário no banco de dados. O erro persistiu.

Eu removi a permissão SELECT e adicionei o usuário à função de banco de dados data_reader. A consulta foi resolvida, mas nenhum dado foi retornado (executar a mesma consulta como um administrador de sistema retorna mais de 130 linhas). Agora estou completamente perplexo.

Eu concedi SELECT ao usuário em sys.sql_expression_dependencies explicitamente com os mesmos resultados acima.

Depois de pesquisar essas permissões, o consenso parece ser que conceder SELECT a um usuário em um banco de dados é o mesmo que adicionar o usuário à função data_reader. Mas este obviamente não é o caso. Quero criar um Login/Usuário com o menor conjunto de privilégios possível para realizar a comparação.

Como faço para conceder acesso à exibição sys.sql_expression_dependencies em mssqlsystemresource sem conceder acesso data_reader em todo o banco de dados? Existe uma maneira de conceder SELECT apenas em mssqlsystemresource?

** Observação - li algumas outras postagens no SE sobre mssqlsystemresource, mas elas não se referem a isso:

  • Não tenho NEGAÇÃO de nada atribuído a este Login/Usuário
  • A participação na função PUBLIC (servidor ou banco de dados) não tem influência, pois as permissões são idênticas às de um servidor "conhecido em bom estado".
  • Prefiro que o usuário não tenha permissões SELECT gerais em todo o banco de dados.
sql-server sql-server-2008-r2
  • 1 1 respostas
  • 6952 Views

1 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2015-12-08T14:06:28+08:002015-12-08T14:06:28+08:00

    Não tenho certeza onde você tropeçou ao longo do caminho, mas isso funciona para mim:

    CREATE LOGIN permtest WITH PASSWORD = 'x', CHECK_POLICY = OFF;
    GO
    USE somedatabase;
    GO
    CREATE USER permtest FROM LOGIN permtest;
    GO
    

    De acordo com esta página , o usuário precisa SELECTde permissão no sys.sql_expression_dependenciese VIEW DEFINITIONno banco de dados.

    Na minha experiência, o seguinte permitiu que o usuário selecionasse na exibição, mas retornou 0 linhas, porque eles não têm a capacidade de visualizar a definição (que inclui cadeias de dependência):

    GRANT SELECT ON sys.sql_expression_dependencies TO permtest;
    

    Para realmente ver qualquer relacionamento em somedatabase, também tive que adicionar o seguinte:

    GRANT VIEW DEFINITION ON DATABASE::floob TO permtest;
    

    Não consegui encontrar nenhuma maneira de tornar isso mais granular ( VIEW/ DENYdefinição funcionou para objetos individuais, mas sem o direito no nível do banco de dados, ainda não consegui ver nenhuma linha na exibição do catálogo e DENYnão impedi que os objetos aparecessem em a visualização do catálogo nem sequer me impediu de visualizar a definição). Eu sinto que o SQL Server teria dificuldade em resolver essa granularidade de qualquer maneira - se você tivesse uma visão que referenciasse uma tabela, como deveria ser a visão do catálogo se você concedesse na visão e negasse na tabela, ou vice-versa?

    Se você não deseja conceder VIEW DEFINITIONno banco de dados, crie procedimentos que usem EXECUTE AS OWNER, selecione (filtrado?) Linhas da exibição do catálogo e dê aos usuários (e, claro, isso também pode ser uma função) executar permissões no procedimento .

    CREATE PROCEDURE dbo.GetDependencies
    WITH EXECUTE AS OWNER
    AS
    BEGIN
      SELECT is_schema_bound_reference --, ...
        FROM sys.sql_expression_dependencies;
    END
    GO
    
    GRANT EXECUTE ON dbo.GetDependencies TO permtest;
    
    • 7

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve