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 / 136555
Accepted
IanG
IanG
Asked: 2016-04-26 20:54:35 +0800 CST2016-04-26 20:54:35 +0800 CST 2016-04-26 20:54:35 +0800 CST

SQL Logins na função db_owner no banco de dados não podem criar procedimentos armazenados

  • 772

Comecei a bloquear as permissões em nosso ambiente de teste removendo a permissão sysadmin de contas genéricas. A primeira conta, usada por vários desenvolvedores, é um login SQL local. Dei à conta a função db_owner no banco de dados. O desenvolvedor informa que não pode mais criar stored procedures.

Eu validei que isso é verdade nesta instância específica do SQL 2014, não posso reproduzi-lo em nenhum outro lugar. Eu fiz tudo o que posso pensar para consertar isso. A melhor pista que tenho é que criei um novo login SQL e dei a ele db_owner no mesmo banco de dados. Ele também não pode criar um procedimento. O login original não pode criar procedimentos em outros bancos de dados do usuário, mesmo que tenha db_owner .

A tentativa de criar um procedimento fornece:

Msg 262, Nível 14, Estado 18, Procedimento TheProcedure, Linha 30
Permissão CREATE PROCEDURE negada no banco de dados 'DBTest'.

A mensagem de erro está correta, CREATE PROCEDUREnão aparece para o usuário, mesmo depois de atribuí-la explicitamente. O usuário pode alterar qualquer procedimento. A criação de UDF recebe um erro semelhante:

Permissão CREATE FUNCTION negada no banco de dados...

Alguém tem alguma ideia do que pode estar acontecendo?

Quando eu faço um:

select * from fn_my_permissions(null, 'DATABASE')

CREATE PROCEDUREnão está listado. Verifiquei se há algum DENYem sys.permissions , não há nenhum.

A seguinte consulta:

SELECT * FROM fn_my_permissions('xyz', 'USER');

retorna:

IMPERSONATE, VIEW DEFINITION, ALTER, CONTROL
sql-server stored-procedures
  • 3 3 respostas
  • 4524 Views

3 respostas

  • Voted
  1. Best Answer
    unclefredo
    2016-05-03T03:33:59+08:002016-05-03T03:33:59+08:00

    Interessante - difícil definir este. Você já pensou em olhar para o papel público?

    sp_helprotect 'CRIAR PROCEDIMENTO', NULL, NULL,'s'

    Isso te traz de volta alguma coisa?

    • 2
  2. Cody Konior
    2016-04-26T23:03:48+08:002016-04-26T23:03:48+08:00

    Ao contrário do sysadmin, que ignora as verificações, as funções de banco de dados integradas não são tão especiais que não possam ser substituídas por um DENY.

    Tente olhar para Exec sp_helpprotect Null, 'Username' e veja quais registros DENY aparecem.

    • 1
  3. Sting
    2016-05-03T07:12:58+08:002016-05-03T07:12:58+08:00

    Resposta curta:

    • Tente alterar o banco de dados padrão do usuário dev para seu banco de dados específico.

    • Na janela Consulta no SS Studio, verifique se eles estão usando o contexto de banco de dados correto na janela Consulta por meio da lista suspensa do banco de dados ou T-SQL USE [DBNAME].

    Resposta longa:

    Não posso falar de todas as circunstâncias, mas conheço um caso em que isso definitivamente aconteceu conosco. O banco de dados padrão foi definido como 'mestre' para nosso usuário específico e tinha direitos SA. Removemos os direitos SA e eis que de repente eles não puderam criar os procedimentos que precisavam - apenas CONNECT.

    Alterar o banco de dados padrão do usuário ajudou o banco de dados a corrigir esse problema. (Acontece que eles só tinham direitos CONNECT para o banco de dados mestre) Além disso, a instrução USE funcionou na janela SS STudio Query:

    USE DBTest
    go
    Create Procedure spMyProc
    as
    select @@servername
    

    Dito isso, eu verificaria o banco de dados mestre (e outros bancos de dados) para ver se os desenvolvedores colocaram erroneamente seu código em outros bancos de dados em vez do banco de dados apropriado - quando eles tinham SA. Para nós, a remoção dos direitos SA definitivamente revelou um problema brilhante em como os desenvolvedores estavam usando o sistema.

    ps Deixe-me saber se eles estão usando bancos de dados parcialmente contidos, pois pode haver usuários com nomes idênticos dentro e fora do banco de dados que causariam problemas semelhantes, aparentemente baseados em permissões.

    • 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