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 / 228427
Accepted
Jonathan
Jonathan
Asked: 2019-01-31 02:09:01 +0800 CST2019-01-31 02:09:01 +0800 CST 2019-01-31 02:09:01 +0800 CST

Como conceder direitos de usuário para criar procedimentos armazenados em um esquema personalizado

  • 772

Estou tentando conceder direitos de logon do SQL Server para criar procedimentos armazenados e vinculá-los a um esquema personalizado. Neste caso, criei um esquema chamado IC. Uma conta de serviço será então adicionada ao esquema com direitos de execução para os procedimentos armazenados.

Minha pergunta é: como faço para conceder a esse login do SQL Server os direitos de criar novos procedimentos armazenados vinculados ao IC?

ja tentei GRANT CREATE ON SCHEMA::IC TO [username];mas só consegui

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'CREATE'.

Alguma sugestão?

sql-server sql-server-2014
  • 2 2 respostas
  • 14538 Views

2 respostas

  • Voted
  1. Best Answer
    Randi Vertongen
    2019-01-31T02:38:03+08:002019-01-31T02:38:03+08:00

    Você não pode alterar a capacidade de criar procedimentos para apenas um esquema concedendo permissões apenas no esquema. (Supondo que o usuário não tenha outros direitos.)

    Por quê?

    O usuário ainda precisa do direito de criar objetos no banco de dados, que neste caso são procedimentos.

    O que você pode fazer é conceder CREATE PROCEDUREdireitos ao usuário e, em seguida, alterar o proprietário do esquema para esse usuário (mais seguro, veja abaixo para obter mais informações) ou conceder a esse usuário permissões no 'IC' SCHEMA.

    Apenas a concessão CREATE PROCEDUREnão permite que o usuário crie procedimentos em esquemas como dbo.

    Crie o login, o usuário correspondente e o esquema IC

    USE [master]
    GO
    CREATE LOGIN [TestIC] WITH PASSWORD=N'Test', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
    GO
    USE [test]
    GO
    CREATE USER [TestIC] FOR LOGIN [TestIC];
    GO
    CREATE SCHEMA IC;
    

    Conceder procedimento de criação ao usuário

    GRANT CREATE PROCEDURE TO [TestIC];
    

    Ou Altere o proprietário do esquema (opção mais segura)

    ALTER AUTHORIZATION ON SCHEMA::IC TO [TestIC];
    

    Ou conceda ao usuário acesso ao esquema

    GRANT 
         ALTER
    
    ON SCHEMA::IC
    
    
          TO [TestIC] ;
    

    Risco envolvido com a concessão de direitos no esquema

    Conceder a um usuário a capacidade de alterar o esquema de outro usuário dá a esse usuário a capacidade de SELECT, INSERT, UPDATE e DELETE linhas em qualquer tabela pertencente ao proprietário desse esquema. Isso é chamado de "Ownership Chaining" e é o que torna as Views e Stored Procedures maneiras realmente simples de controlar a segurança, pois um usuário que tem permissões em uma View ou Stored Procedure não precisa receber permissões na tabela subjacente, desde que o View/Proc tem o mesmo dono que a Tabela.

    Fonte

    Dê uma olhada na resposta de @DavidBrowne-Microsoft para a origem da cotação e para obter mais informações sobre os riscos de segurança de "encadeamento de propriedade" ao conceder direitos de alteração de esquema.

    Teste

    EXECUTE AS LOGIN  = 'TestIC';
    
    CREATE PROCEDURE IC.test
    as
    select * from sys.databases; 
    

    Resultado:

    Comandos concluídos com sucesso.

    Isso falha

    CREATE PROCEDURE dbo.test
    as
    select * from sys.databases; 
    

    Msg 2760, Level 16, State 1, Procedure test, Line 1 [Batch Start Line 35] O nome do esquema especificado "dbo" não existe ou você não tem permissão para usá-lo.

    Desfazer representação

    REVERT;
    
    • 3
  2. Viorel Ciucu
    2019-01-31T02:37:09+08:002019-01-31T02:37:09+08:00

    Você pode tentar dar a permissão ALTER:

    GRANT ALTER ON SCHEMA::IC TO [username];
    

    Documentos

    Dos documentos:

    Um usuário com permissão ALTER em um esquema pode usar o encadeamento de propriedade para acessar protegíveis em outros esquemas, incluindo protegíveis aos quais esse usuário tem acesso explicitamente negado. Isso ocorre porque o encadeamento de propriedade ignora as verificações de permissões em objetos referenciados quando eles são de propriedade do principal que possui os objetos que se referem a eles. Um usuário com permissão ALTER em um esquema pode criar procedimentos, sinônimos e exibições pertencentes ao proprietário do esquema. Esses objetos terão acesso (através do encadeamento de propriedade) a informações em outros esquemas pertencentes ao proprietário do esquema. Quando possível, você deve evitar conceder permissão ALTER em um esquema se o proprietário do esquema também possuir outros esquemas.

    • 0

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