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 / 42668
Accepted
Andrew Savinykh
Andrew Savinykh
Asked: 2013-05-21 18:20:17 +0800 CST2013-05-21 18:20:17 +0800 CST 2013-05-21 18:20:17 +0800 CST

Permissões de servidor de um procedimento armazenado de ativação de uma fila do Server Broker

  • 772

Eu tenho um procedimento armazenado que consulta a exibição sys.dm_exec_requests . No procedimento armazenado, a exibição retorna apenas uma linha, enquanto o procedimento armazenado precisa ver todos eles. O artigo do MSDN na exibição diz que o que é retornado depende da permissão do usuário:

Se o usuário tiver permissão VIEW SERVER STATE no servidor, o usuário verá todas as sessões em execução na instância do SQL Server; caso contrário, o usuário verá apenas a sessão atual.

O procedimento armazenado é, na verdade, um procedimento armazenado de ativação de uma fila do intermediário:

CREATE QUEUE test_queue
  WITH 
  STATUS = ON,
  RETENTION = OFF ,
  ACTIVATION (
    STATUS = ON,
    PROCEDURE_NAME = test_procedure,
    MAX_QUEUE_READERS = 1, 
    EXECUTE AS SELF ),
POISON_MESSAGE_HANDLING (STATUS = ON) 
ON [PRIMARY]

Quando li o artigo do MSDN, mudei

EXECUTE AS SELF

para

EXECUTE AS 'dbo'

o que não fez nenhuma diferença. sys.dm_exec_requestsainda retornaria uma única linha.

Também tentei fazer

EXECUTE AS OWNER

O que também não fazia diferença. Pelo que entendi, o proprietário do procedimento armazenado é quem o criou, que fui eu. E como estou em uma função de administrador de sistema, isso deveria estar funcionando, mas não está. Agradeço qualquer dica de solução de problemas.

Em particular, gostaria de saber como listar as permissões de um servidor para um determinado usuário para que eu pudesse verificar se eles incluem a permissão 'VIEW SERVER STATE' conforme o artigo.

A parte confusa é que o usuário , pelo que entendi, está no nível do banco de dados, então não está claro para mim como ele pode ter permissão de servidor. Se você pudesse esclarecer isso, seria ótimo também.

sql-server sql-server-2012
  • 2 2 respostas
  • 3484 Views

2 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2013-08-27T10:42:41+08:002013-08-27T10:42:41+08:00

    Consulte Assinando um procedimento ativado para obter um exemplo de como assinar corretamente um procedimento ativado exatamente para que ele possa alavancar o privilégio VIEW SERVER STATE de um procedimento ativado. As etapas são:

    • inspecione o código do procedimento para garantir que você confia nele
    • altere o procedimento para ter uma cláusula EXECUTE AS OWNER (sem EXECUTE AS, mesmo se o módulo estiver assinado, o principal não terá acesso fora do banco de dados do host devido à forma como o Service Broker executa o procedimento de ativação)
    • crie um certificado com uma chave privada no banco de dados do aplicativo
    • assine o procedimento com a chave privada do certificado que você criou
    • descartar a chave privada do certificado (para evitar que seja usado novamente)
    • copie o certificado no banco de dados mestre
    • criar um login a partir do certificado
    • conceder AUTHENTICATE SERVER ao login derivado do certificado
    • conceder qualquer privilégio adicional exigido pelo procedimento (por exemplo, VIEW SERVER STATE) para o login derivado do certificado
    • 6
  2. Andreas Wolter
    2013-08-27T08:56:37+08:002013-08-27T08:56:37+08:00

    Na verdade, usar certificados é o caminho a seguir, como a Resposta 1 no outro tópico está mostrando ( problemas de permissão SA com muitos objetos aninhados ). No seu cenário, isso simplesmente não pode funcionar - a menos que você marque o banco de dados como CONFIÁVEL. Isso faria com que seu proc fosse executado se representado por "dbo". - No entanto, eu não sou um grande fã disso, porque abre todo o banco de dados para elevação, a menos que você realmente saiba quem está chamando o quê e possuindo o quê...

    • 2

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

    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

    Conceder acesso a todas as tabelas para um usuário

    • 5 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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