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 / 252828
Accepted
sepupic
sepupic
Asked: 2019-11-09 03:13:52 +0800 CST2019-11-09 03:13:52 +0800 CST 2019-11-09 03:13:52 +0800 CST

SET IDENTITY_INSERT pode ser permitido com menos privilégios que db_ddladmin?

  • 772

Eu herdei um sistema onde o aplicativo está sendo executado em sysadminconta. Limitei essa conta a db_datareader+ db_datawriter+ EXECUTEem todo banco de dados e configurei extended eventsa sessão para pegar o permission errorsno servidor.
Foi muito surpreendente para mim ver algumas insertsfalhas, mesmo que o usuário seja membro db_datawritere nenhuma restrição granular nas tabelas seja aplicada.

Então observo que apenas as inserções que definiram IDENTITY_INSERTfalharam. O banco de dados em questão está cheio identitye há muito SET IDENTITY_INSERTem seu código. O código significa não apenas modulesarmazenado no servidor, mas também C#código.

Para poder definir identity_inserto usuário deve possuir a tabela ou ter ALTERpermissão na tabela. Mas o fato é que você NÃO PODE conceder ALTERapenas em tabelas , sou obrigado a conceder ALTERem um banco de dados inteiro para isso user (vou tornar esse usuário membro de db_ddladminrole que adicionará apenas 42 permissões(!!!) vs 51 permissões que poderiam ser adicionado às permissões do usuário, concedendo ALTERno banco de dados)

Não estou interessado em refatorar o banco de dados com sequence(a versão do servidor é 2014para que eu possa fazê-lo teoricamente) e não posso simplesmente adicionar execute as dboa todos os sp que uso identity_insertporque também há código de aplicativo para reescrever, só me pergunto por que a Microsoft faz algo tão estranho design de permissões que db_datawriternão pode definir identity_insert?

Existe outra maneira de fazer com que o usuário possa definir identity_insertque adicionará menos permissões do que db_ddladmin?


ATUALIZAR

Eu tentei a solução oferecida pelo LowlyDBA com synonyms:

create table dbo.t(id int identity);
go

alter schema sch transfer dbo.t;
go

create synonym dbo.t for sch.t;
go

set IDENTITY_INSERT dbo.t on;

Isso causa o erro

Msg 1088, Level 16, State 11, Line 1 Não é possível localizar o objeto "dbo.t" porque ele não existe ou você não tem permissões.

insira a descrição da imagem aqui


A solução de Antoine Hernandezconceder ao usuário ALTER apenas no esquema parece ser o menor dos males, então eu aceito

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

2 respostas

  • Voted
  1. Best Answer
    Antoine Hernandez
    2019-11-09T10:00:21+08:002019-11-09T10:00:21+08:00

    Sugiro que você crie uma função de banco de dados personalizada clicando com o botão direito do mouse na pasta de função de banco de dados.

    insira a descrição da imagem aqui

    Isso exibirá a função de banco de dados que você pode personalizar. Na primeira tela, você pode dar à função o nome e o proprietário de sua escolha. Você também pode adicionar o usuário que deseja que seja membro dessa função.insira a descrição da imagem aqui

    Feito isso, você pode clicar em Securables para poder escolher o que conceder.insira a descrição da imagem aqui

    Adicionar objetos aparecerá e sugiro escolher a opção "Todos os objetos dos tipos..." e clicar em OK.insira a descrição da imagem aqui

    Em Select Object Types, role para baixo para localizar Schemas, marque a caixa e clique em OK.insira a descrição da imagem aqui

    Agora você verá uma lista de esquemas, então escolha o(s) esquema(s) que possui os objetos aos quais você deseja conceder permissões e ele mostrará as permissões para esse esquema abaixo.insira a descrição da imagem aqui

    Para este exemplo, escolhi o esquema dbo. Redimensionei a tela padrão para mostrar mais de uma vez.insira a descrição da imagem aqui

    Nesse caso, eu provavelmente escolheria conceder Alter porque, de acordo com a Microsoft , "quando concedido em um escopo, ALTER também concede a capacidade de alterar, criar ou descartar (ênfase minha) qualquer protegível contido nesse escopo ". Com base no infográfico sobre permissões de banco de dados, localizado aqui e abaixo , conceder Alter no esquema concederá alter em Agregado, Padrão, Função, Procedimento, Fila, Regra, Sinônimo, Tabela e Visualização:Link da Microsoft https://aka.ms/sql-permissions-posterComo estou neste estágio, para essa mesma função, provavelmente também concederia Execute também para que o membro da função também pudesse executar qualquer procedimento armazenado para que, quando novas tabelas ou procedimentos armazenados fossem adicionados ao banco de dados, eu não precisaria modificar nenhum segurança para permitir que os novos objetos funcionem como os objetos existentes. Assim, as seleções ficariam assim depois de concluídas:insira a descrição da imagem aqui

    Eu poderia ter dado um passo adiante e também concedido Select, Insert, Update e Delete, e provavelmente teria coberto tudo o que a função exigiria para ler, inserir, excluir e atualizar qualquer tabela, bem como executar qualquer procedimento armazenado sem precisar conceder todas as outras permissões que a função db_ddladmin concede. Ao fazer isso no nível do esquema, ele pode facilitar o gerenciamento da segurança de algumas maneiras, especialmente quando um usuário específico precisa ter muito, se não todo o acesso no nível do esquema, mas também satisfaz o requisito de não conceder alteração ao todo. base de dados. Se houver outras permissões que essa configuração concede às quais a função não precisa, você poderá adicionar permissões DENY conforme necessário.

    • 6
  2. AndreasS
    2022-04-04T05:58:39+08:002022-04-04T05:58:39+08:00

    Na pergunta, o OP afirma que não é possível conceder ALTER apenas a uma tabela. Talvez eu tenha entendido errado alguma coisa. Mas descobri que no SQL Management Studio para um usuário de banco de dados em Securables posso adicionar uma única tabela e, em seguida, para Permissões na linha Alter ativar Grant. IDENTITY_INSERT ON corre felizmente depois disso. Isso está no SQL-Server2012 (v13) para um usuário de banco de dados "IIS APPPOOL\xyz" que por padrão pode selecionar, executar, atualizar, inserir, excluir.

    Estou longe de ser um especialista nisso. Apenas tentei. Alguém pode comentar se isso realmente apenas adiciona a capacidade de modificar o esquema da respectiva tabela? Eu poderia viver com isso.

    • 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