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 / 308115
Accepted
Skary
Skary
Asked: 2022-03-02 03:57:20 +0800 CST2022-03-02 03:57:20 +0800 CST 2022-03-02 03:57:20 +0800 CST

SQL Server permite encadeamento de procedimento armazenado

  • 772

Eu tenho que presumir que não sou um DBA, mas tenho a necessidade de manter uma instância do SQL Server e tenho poucos problemas com o encadeamento de permissão de procedimento armazenado (espero que os termos estejam corretos).

Para explicar brevemente minhas necessidades, eu tenho um usuário que deve ter concessão apenas em um banco de dados que deve executar um procedimento armazenado (nesse banco de dados "concedido") que contém referência a um banco de dados externo (devo herdar um pouco de concessão)

Em detalhes, meu cenário é que eu tenho três DBs

  1. DB de configuração (deve ser lido por todos, mas nunca escrito por ninguém, exceto pelo usuário de configuração)
  2. Staging DB (deve ser lido/escrito pelo procedimento de preparação)
  3. DB final (deve ser lido/escrito pelo aplicativo)

Então eu tenho três usuários

  1. Usuário de configuração: usado para manter dados no banco de dados de configuração
  2. Usuário de teste: usado por muitos procedimentos de teste (procedimentos muito longos, podem levar horas) que colocam dados no banco de dados de teste
  3. Usuário Final : usado pelo aplicativo que leu os dados quando o procedimento de preparação terminou para implantar os dados no banco de dados de preparação e colocá-los de volta no banco de dados final. O usuário final pode acessar todos os bancos de dados (pelo menos para leitura)

Até aí tudo bem, o procedimento de staging faz seu trabalho e quando completo escreve um semáforo (para notificar que os dados estão prontos). Às vezes, o aplicativo (que usa o usuário final) verifica o semáforo e ingere todos os dados no banco de dados final.

Agora eu tenho que oferecer suporte a um procedimento de teste rápido e sob demanda (ainda preciso executar no Staging DB por outros motivos) que, quando concluído, deve atualizar diretamente os dados no banco de dados final.

Eu escrevi esse procedimento e tudo funciona como pretendido, mas tenho que conceder a operação de leitura/gravação no FinalDB para o usuário de teste e não gosto disso. Existem muitos aplicativos que usam o Staging User e alguns deles não estão "sob meu controle", então não quero que um aplicativo defeituoso que deve gravar dados no Staging DB acabe mexendo com o Final DB. Posso aceitar que meu novo procedimento de teste sob demanda pode ser crítico (e acabar atrapalhando o BD Final).

Então a questão é, Staging User já tem permissão para executar um procedimento armazenado (EG : OnDemandUpdate) porque faz parte do Staging DB, mas que contém insert/update sobre uma tabela externa (do Final DB) e eu quero que a concessão possa ser acorrentado. Como eu posso fazer isso?

sql-server stored-procedures
  • 1 1 respostas
  • 281 Views

1 respostas

  • Voted
  1. Best Answer
    J.D.
    2022-03-02T04:11:33+08:002022-03-02T04:11:33+08:00

    Acho que o que você está procurando é o encadeamento de propriedade entre bancos de dados :

    O encadeamento de propriedade entre bancos de dados é uma extensão do encadeamento de propriedade, exceto que cruza o limite do banco de dados.

    Consulte os Manuais Online da Microsoft para obter mais informações. É possível ativá-lo apenas para bancos de dados individuais que podem fazer mais sentido para o seu caso de uso:

    Você pode definir o encadeamento de propriedade entre bancos de dados para bancos de dados individuais usando a cláusula SET da instrução ALTER DATABASE. Se você estiver criando um novo banco de dados, poderá definir a opção de encadeamento de propriedade entre bancos de dados para o novo banco de dados usando a instrução CREATE DATABASE.


    Como alternativa, outra solução poderia ser usar a EXECUTE ASinstrução para representar um logon que tem acesso à tabela no banco de Finaldados.

    Você colocaria dentro do procedimento que o Stagingusuário tem acesso para executar, e então somente esse procedimento teria acesso para modificar a tabela no banco de Finaldados.

    Com esta solução o Stagingusuário precisaria de acesso para poder personificar o Login que está sendo usado. Isso é melhor do que conceder Finalacesso diretamente ao Stagingusuário porque você está controlando seu banco de dados por meio de procedimentos armazenados e, idealmente, o login que ele estará representando apenas tem acesso limitado (apenas a única tabela que você precisa atualizar?) no banco de Finaldados.

    • 4

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