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 / user-50728

Steve Mangiameli's questions

Martin Hope
Steve Mangiameli
Asked: 2015-12-08 10:40:42 +0800 CST

Como você GRANT SELECT no banco de dados de recursos ocultos mssqlsystemresource?

  • 4

Eu recebo um erro quando executo esta consulta:

    SELECT 
      dependencies.referencing_id as object_id,
      dependencies.referencing_minor_id as column_id,
      dependencies.referenced_id AS referenced_object_id,
      RTRIM(referenced_objects.type) AS referenced_type
    FROM 
      sys.sql_expression_dependencies AS dependencies
    JOIN sys.objects AS referenced_objects WITH(NOLOCK) ON referenced_objects.object_id = dependencies.referenced_id
    WHERE dependencies.referencing_id != dependencies.referenced_id

Erro :

A permissão SELECT foi negada no objeto 'sql_expression_dependencies', banco de dados 'mssqlsystemresource', esquema 'sys'.

O Login tem associação apenas na função de servidor PUBLIC e concedeu VIEW ANY DATABASE e VIEW ANY DEFINITION. Adicionei um usuário com associação na função de banco de dados PUBLIC para o banco de dados que estou comparando. Presumi que a permissão no nível do servidor seria suficiente, mas estava errado. Fiz isso em um banco de dados 2008R2, além de um banco de dados 2014.

No banco de dados de 2014, também concedi permissão de nível de servidor SELECT ALL USER SECURABLES. O erro persistiu.

Eu concedi o SELECT do usuário no banco de dados. O erro persistiu.

Eu removi a permissão SELECT e adicionei o usuário à função de banco de dados data_reader. A consulta foi resolvida, mas nenhum dado foi retornado (executar a mesma consulta como um administrador de sistema retorna mais de 130 linhas). Agora estou completamente perplexo.

Eu concedi SELECT ao usuário em sys.sql_expression_dependencies explicitamente com os mesmos resultados acima.

Depois de pesquisar essas permissões, o consenso parece ser que conceder SELECT a um usuário em um banco de dados é o mesmo que adicionar o usuário à função data_reader. Mas este obviamente não é o caso. Quero criar um Login/Usuário com o menor conjunto de privilégios possível para realizar a comparação.

Como faço para conceder acesso à exibição sys.sql_expression_dependencies em mssqlsystemresource sem conceder acesso data_reader em todo o banco de dados? Existe uma maneira de conceder SELECT apenas em mssqlsystemresource?

** Observação - li algumas outras postagens no SE sobre mssqlsystemresource, mas elas não se referem a isso:

  • Não tenho NEGAÇÃO de nada atribuído a este Login/Usuário
  • A participação na função PUBLIC (servidor ou banco de dados) não tem influência, pois as permissões são idênticas às de um servidor "conhecido em bom estado".
  • Prefiro que o usuário não tenha permissões SELECT gerais em todo o banco de dados.
sql-server sql-server-2008-r2
  • 1 respostas
  • 6952 Views
Martin Hope
Steve Mangiameli
Asked: 2015-10-22 07:54:16 +0800 CST

Falha de login para o usuário 'NT AUTHORITY\ANONYMOUS LOGON'

  • 4

Eu tenho um servidor de operações executando o back-end do Windows Server 2012R2 e do SQL Server 2014 Enterprise. Este servidor é usado para implantar o novo código em outros servidores de produção por meio do arquivo cmd chamado por um SQL Agent Job. Todos os servidores estão no mesmo domínio.

O servidor A executa o back-end Windows Server 2008R2 e SQL Server 2008R2. Este servidor possui um servidor vinculado conectando-se a um banco de dados no Servidor B, executando o mesmo sistema operacional e a mesma versão do SQL Server que A. O servidor vinculado é configurado com a opção @useself=TRUE.

  • Todos os três servidores usam uma conta de serviço habilitada para delegação.
  • Essa conta de serviço tem privilégios sa em todas as três instâncias do SQL Server.
  • Todos os três servidores têm SPNs configurados com essa conta e são delegados para usar Kerberos para os serviços MSSQLSVC associados.

Posso executar o seguinte em cada um e "Kerberos" é retornado

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid

Além disso, posso fazer telnet, ping etc. de qualquer um desses servidores para qualquer outro servidor sem problemas - tudo está conectado. As implantações de código nunca tiveram problemas e o servidor vinculado é referenciado com frequência e sem problemas ... exceto por um cenário e não entendo o porquê.

Cenário de salto duplo

  1. Um trabalho do SQL Agent no servidor de Operações é executado ad hoc por qualquer administrador de sistema que não seja a conta de serviço do SQL Agent e executa um arquivo cmd, também no servidor de Operações.
  2. O trabalho do SQL Agent é configurado para "Executar como" uma conta de serviço do SQL Agent, com privilégios sa.
  3. O código implantado vem de um arquivo .sql no servidor de operações.
  4. O arquivo cmd chama o SQLCMD para executar o código no arquivo .sql no Servidor A.
  5. O código no arquivo .sql faz referência ao servidor vinculado e falha com erro

    *Msg 18456, Nível 14, Estado 1, Servidor ServidorB, Linha 1 Login falhou para o usuário 'NT AUTHORITY\ANONYMOUS LOGON'. * .

O erro é direcionado ao servidor vinculado - Servidor B. Se eu executar esse código manualmente, usando o SQLCMD, do servidor de Operações no Servidor A, ele rodará bem. Se eu fizer logon em uma caixa como a conta de serviço do SQL Agent e executar o trabalho do SQL Agent, ele funcionará bem. É somente quando o trabalho do SQL Agent é executado por alguém que não seja a conta de serviço do SQL Agent que recebo o erro.

Eu li tantos posts e blogs e artigos do MSDN sobre Kerberos, double hop, etc, me dizendo para fazer o que já foi feito. o que estou perdendo?

Informações Adicionais Finalmente consegui voltar a isso e localizei algumas informações adicionais. Seguindo o conselho de Bogdan, executei o Process Explorer e verifiquei se as credenciais para o primeiro salto são da conta do SQL Agent Service conforme o esperado e se o TCP está sendo usado. Infelizmente, essas são todas as informações úteis que consegui obter da ferramenta.

Eu vasculhei os logs do aplicativo do Windows e procurei informações de login para as diferentes instâncias nas máquinas e notei que o Kerberos nem está sendo usado !!! Em vez disso, o NTLM está sendo usado.

Portanto, esse é o novo caminho que estou seguindo - por que a autenticação NTLM está sendo usada, quando o Kerberos está configurado e os FQDN SDNs adequados existem por porta e instância? Preciso especificar de alguma forma o tipo de autenticação no arquivo cmd ou na chamada SQLCMD? Ou eu tenho algo mal configurado que não estou pensando?

O mistério se aprofunda A chamada SQLCMD referenciou o servidor "primeiro salto" via Alias. Modifiquei a referência do servidor SQLCMD para a instância nomeada real e executei novamente o trabalho. Funcionou! Também usamos cNames para nossas máquinas e instâncias SQL, então tentei usar isso. Também funcionou! Para sorrisos e gargalhadas, tentei novamente o pseudônimo ... funcionou ??? Eu vou verificar os logs de aplicativos do Windows para cada um deles e ainda está relatando a autenticação como NTLM!

Estou completamente perplexo neste ponto e sem saber como explicar esse comportamento para consertar o resto do nosso ambiente.

sql-server kerberos
  • 2 respostas
  • 7439 Views
Martin Hope
Steve Mangiameli
Asked: 2014-10-22 09:23:51 +0800 CST

O banco de dados está felizmente disponível mesmo durante o crescimento do log?

  • 3

Venho criando um processo para percorrer todos os nossos bancos de dados e analisar a estrutura de log, fazer backup, encolher e redimensionar adequadamente, levando em consideração os requisitos operacionais e o dimensionamento/quantidade de VLF. Meu código está funcionando perfeitamente, mas encontrei algo no teste hoje que não esperava.

Eu tenho um banco de dados de bom tamanho com um log de 104 GB e cerca de 900 VLFs. Fiz backup do log e reduzi a quase nada durante um período de baixa atividade. Em seguida, comecei a aumentá-lo de volta ao tamanho original em iterações de 8 GB, mantendo os VLFs em torno de 512 MB. Durante o crescimento (em algum lugar entre 48 GB e 56 GB), fiquei curioso sobre a disponibilidade do banco de dados e comecei a executar SELECTS aleatórios em tabelas diferentes. Os resultados retornaram sem problemas. Em seguida, criei uma tabela no banco de dados e fiz um loop de várias inserções.

Fiquei surpreso quando o log continuou a crescer e a criação da tabela e as inserções foram concluídas sem problemas ou atrasos. Fiquei com a impressão de que o banco de dados seria de alguma forma bloqueado, bloqueando DDL e DML, até que o novo crescimento fosse concluído. Claro, considerando a natureza circular do log, posso ver como isso seria uma suposição falsa. Mas não consigo encontrar nada na web de uma forma ou de outra.

Alguém pode lançar alguma luz ou apontar-me na direção certa sobre o que está acontecendo? Obrigado!

sql-server transaction-log
  • 1 respostas
  • 117 Views

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