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 / 74679
Accepted
usr
usr
Asked: 2014-08-23 06:47:28 +0800 CST2014-08-23 06:47:28 +0800 CST 2014-08-23 06:47:28 +0800 CST

Usando a função sysadmin com EXECUTE AS

  • 772

Entendo que posso usar a EXECUTE AS OWNERcláusula como parte de um procedimento que criei para fazer com que o corpo desse procedimento seja executado como um usuário diferente. Meu objetivo é executar um comando que requer o sysadminpapel ( DBCC TRACEON(1224)). Este procedimento deve ser chamado por um usuário sem privilégios.

Eu executei o seguinte script no sausuário:

SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin')
-- dbo  1   1

IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'MyProc')
    DROP PROCEDURE MyProc

GO
CREATE PROCEDURE MyProc
WITH EXECUTE AS OWNER
AS 
    SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin');
-- dbo  1   0

    DBCC TRACEON(1224)
--Msg 2571, Level 14, State 3, Procedure MyProc, Line 7
--User 'dbo' does not have permission to run DBCC TRACEON.

RETURN
GO

EXEC MyProc

A saída está embutida nos comentários. Acontece que fora do procedimento pareço ter sysadminadesão, mas não dentro do procedimento.

O procedimento é de propriedade do dbousuário. Entendo que não é possível conceder a sysadminfunção a um usuário do banco de dados (pelo menos a GUI não oferece essa possibilidade). Portanto, não vejo como poderia fazer um usuário de banco de dados ter uma função de servidor.

Eu também tentei o EXECUTE AS 'sa'que resulta em Cannot execute as the user 'sa', because it does not exist or you do not have permission.. A documentação afirma que só posso especificar um nome de usuário, não um nome de login. Então eu entendo porque isso não funcionou.

Como posso executar meu procedimento com sysadminassociação de função?

sql-server security
  • 3 3 respostas
  • 11221 Views

3 respostas

  • Voted
  1. Kin Shah
    2014-08-23T07:38:23+08:002014-08-23T07:38:23+08:00

    Meu objetivo é executar um comando que requer a função sysadmin (DBCC TRACEON(1224))

    Você está abrindo um buraco em sua segurança ao permitir que um usuário sem privilégios execute a função de administrador do sistema.

    Se você estiver tentando definir o 1224traceflag, que desabilita a escalação de bloqueio com base no número de bloqueios, poderá fazê-lo no nível da tabela usandoALTER TABLE

    Por exemplo, Below habilita o escalonamento de bloqueio para o nível de partição em uma tabela particionada. Se a tabela não for particionada, a escalação de bloqueio será definida no nível TABLE.

    ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);-- as opções válidas são AUTO, TABLE e DISABLE

    Agora você pode apenas dar a um usuário sem privilégios direitos de alteração de tabela.

    HTH

    • 6
  2. Best Answer
    Kenneth Fisher
    2014-08-23T07:13:54+08:002014-08-23T07:13:54+08:00

    Isso pode ser feito, mas geralmente é considerado bastante perigoso. Em um nível muito básico, você define o trustworthysinalizador no banco de dados e, ao usá-lo execute asno sp, ele pode aproveitar o acesso de segurança dos principais no nível do servidor.

    Devido ao quão perigoso isso é, não quero entrar em detalhes aqui. No entanto, eu escrevi sobre isso aqui com instruções específicas sobre como fazê-lo.

    Tudo o que foi dito, certifique-se NEEDde fazer absolutamente dessa maneira. Você está abrindo uma grande brecha de segurança. Se você decidir fazer isso, coloque seu SP em seu próprio banco de dados e apenas conceda aos usuários conectar e executar acesso ao sp.

    • 5
  3. Daniel Hutmacher
    2014-08-23T07:00:36+08:002014-08-23T07:00:36+08:00

    Criar um trabalho do SQL Server Agent (de propriedade de um membro do administrador do sistema) resolverá o problema, embora eu perceba que essa não é uma solução muito bonita.

    O usuário pode iniciar o trabalho (de forma assíncrona) usando msdb.dbo.sp_start_job. A execução de um trabalho do Agente de forma síncrona, no entanto, requer mais algumas linhas de código se for um requisito. Além disso, obviamente, você precisa ter o serviço SQL Server Agent instalado e funcionando.

    • 0

relate perguntas

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

  • Os procedimentos armazenados impedem a injeção de SQL?

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

  • Protegendo senhas de banco de dados

  • 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