Relatório de Consulta: Configuração de Usuário Somente Leitura 

Um usuário somente leitura em um banco de dados tem permissões exclusivas para ler informações e executar relatórios de consulta. Essa configuração garante consultas seguras e bloqueia o acesso a dados sensíveis no banco de dados do aplicativo.

Função necessária: Administrador da organização, SDAdmin, usuários com permissão de Criar Relatório de Consulta

É necessário ter conhecimento em SQL para configurar usuários somente leitura. 

 

Conteúdo 

  • Configurar um usuário somente leitura no Postgres.
  • Configurar um usuário somente leitura no banco de dados Microsoft SQL .
  • Solucionar falhas de Relatório de Consulta

 

Configurar um usuário somente leitura no Postgres 

  • Conecte-se ao banco de dados do aplicativo como um usuário com permissão para criar uma função/usuário.
Nos scripts, substitua os valores entre <> conforme sua preferência. 
  •  Crie um usuário com credenciais de login.

CREATE USER <username> WITH PASSWORD '<password>';
  •  Conceda os privilégios necessários ao usuário:

    • Banco de dados

GRANT CONNECT ON DATABASE <servicedesk_database> TO <username>;
  • Esquema
GRANT USAGE ON SCHEMA public TO <username>;
  • Tabelas 
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <username>;
  • Para restringir o acesso a determinadas tabelas, revogue o acesso de SELECT. Consulte o script
--Consulta de exemplo
REVOKE SELECT ON <tableName> TABLE FROM <username>;
REVOKE SELECT ON aaapassword TABLE FROM readonlyuser;
  • Para restringir funções do Postgres, remova a permissão de execução da função pública usando comandos de Data Control Language (DCL).

  • Use este script  para criar uma função de revoke. Depois que uma função de revoke for criada, execute a seguinte consulta para remover a permissão de execução para usuários públicos.

SELECT sdp_revoke_execute_on_functions('public');
  • Execute a seguinte consulta para revogar permissões de execute para funções de um usuário somente leitura.

 SELECT sdp_revoke_execute_on_functions('<nome do usuário somente leitura>');
  • Como os privilégios de revoke só podem ser fornecidos para funções públicas, você pode restaurar os privilégios da função pública para usuários individualmente.


Para restaurar privilégios de revoke para outros usuários, forneça permissões de execute a todos os usuários, exceto usuários públicos e somente leitura. Use este script  para criar uma função grant.

  • Execute a seguinte consulta para obter os usuários.

SELECT usename FROM pg_catalog.pg_user;

Os usuários mencionados na captura de tela são apenas para referência.
  • Execute a seguinte consulta para conceder privilégios de função pública a outros usuários. Substitua <username> por usuários que não sejam públicos ou somente leitura.

 SELECT sdp_grant_execute_on_functions('<username>'); 
  • Para verificar se a restrição foi atendida, conecte-se ao banco de dados como o usuário somente leitura recém-criado e certifique-se de que as consultas restritas sejam negadas.

 SELECT pg_sleep(10);
  • Por padrão, determinadas palavras e tabelas têm consulta restrita. Para obter essas palavras-chave, use o script a seguir:

SELECT Distinct(table_name) as "Name" FROM information_schema.tables WHERE lower(table_name) NOT IN (SELECT lower(table_name) from TableDetails) ORDER BY table_name;\

 

Configurar um usuário somente leitura no banco de dados Microsoft SQL 

 No Microsoft SQL, você não pode configurar um usuário somente leitura quando o banco de dados estiver vinculado ao servidor de aplicativos usando autenticação do Windows. 
  • Conecte-se ao banco de dados Microsoft SQL como um usuário que tenha a função CREATE USER ou LOGIN.

  • Conecte-se ao console de consulta com o banco de dados do aplicativo e crie um usuário com credenciais de login.

CREATE LOGIN <username> WITH PASSWORD '<password>';
CREATE USER <username> FOR LOGIN <username>;
  • Para obter os privilégios de somente leitura necessários, use os seguintes comandos.

  • Restrinja todos os outros comandos, exceto SELECT.

DENY INSERT, UPDATE, DELETE ON SCHEMA :: [dbo] TO <userName>;
  • O comando a seguir revoga os privilégios de SELECT para todas as tabelas.

REVOKE SELECT ON SCHEMA :: [dbo] FROM <userName>;

 

Acesso restrito a tabelas no Microsoft SQL 

  • Para fornecer acesso apenas a tabelas específicas, execute o script a partir daqui.

 Ignore problemas relacionados a uma tabela ou objeto não encontrado. 
  • Para verificar se a restrição foi aplicada, faça login no banco de dados como o usuário recém-criado, execute as consultas a seguir e certifique-se de que as tabelas restritas não sejam consultadas.\

--Consulta de exemplo
SELECT * FROM aaapassword;
  • Se o resultado da consulta mostrar uma mensagem de restrição de tabela SQL, a restrição de tabelas foi aplicada com sucesso.

    • Se a restrição de tabelas não tiver sido aplicada, siga estes comandos e verifique novamente. Consulte aqui  para a lista de tabelas restritas.

REVOKE SELECT ON [SchemaName].[TableName] FROM [UserName];
--ou
DENY SELECT ON [SchemaName].[TableName] FROM [UserName];
  • Verifique se todas as outras tabelas podem ser consultadas.
--Consulta de exemplo
SELECT * FROM reportmoduleconfiguration;
  • Verifique se as linhas da tabela são retornadas. Caso contrário, execute este script  e verifique novamente.

 

  • Para restringir funções SQL, execute a seguinte consulta.

DENY EXECUTE ON <FunctionName> FROM <Read-Only User Name>;    
  • Para funções como xp_cmdshel, execute o seguinte

DENY EXECUTE ON xp_cmdshell FROM rouser
  • Por padrão, algumas tabelas e palavras não podem ser consultadas. Obtenha essas palavras usando a seguinte consulta.

SELECT * FROM ( SELECT DISTINCT(name) as "Name" FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE' OR type_desc = 'INTERNAL_TABLE' OR type_desc = 'USER_TABLE' OR type_desc = 'VIEW' UNION SELECT DISTINCT(name) FROM sys.tables UNION SELECT DISTINCT(name) FROM sysobjects WHERE sysobjects.xtype = 'U' OR sysobjects.xtype = 'S' UNION SELECT DISTINCT(name) FROM sys.system_views UNION SELECT DISTINCT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES ) AS t WHERE t.Name NOT IN (SELECT TableDetails.TABLE_NAME FROM TableDetails );

 

Obter a chave criptografada da senha 

  • Vá para [ServiceDesk Plus Home]\bin no prompt de comando.

  • Execute o arquivo encrypt.bat.

  • Digite a senha do usuário somente leitura e pressione Enter.

  • Copie a chave de criptografia da senha exibida no prompt de comando e armazene-a em um local seguro.

  • Vá para {SDP_Home}/ServiceDesk/conf.

  • Abra o arquivo database_params.conf .

  • Configure o nome de usuário na tag relevante. Por exemplo,

rodatasource.username=<username> 
  • Obtenha a chave da senha criptografada e configure-a na tag relevante. Por exemplo,

rodatasource.password=<password> 

 

 

Atualizar sinalizador do banco de dados    

  • Depois que o usuário for criado, conecte o aplicativo ao banco de dados e execute a seguinte consulta. Isso permitirá que o usuário somente leitura crie relatórios de consulta seguros que não busquem dados das tabelas restritas: UPDATE ReportModuleConfiguration SET PARAMVALUE = 'true' WHERE CATEGORY LIKE 'ROUser' AND PARAMETER LIKE 'Use_ROUser'.

  • Reinicie o aplicativo para que as alterações entrem em vigor.

 

Solucionar falhas de relatórios de consulta 

1. Falhas de backup no Postgres incorporado.

Se ocorrer uma falha de backup devido a problemas de permissão, use este script  para restaurar as permissões necessárias para os usuários do banco de dados do aplicativo (sdpadmin).

 

2. No banco de dados Microsoft SQL, o relatório de consulta falha com a mensagem de erro "Tabela(s) restrita(s) encontrada(s) na consulta."

  • Certifique-se de que a consulta não esteja acessando tabelas restritas.
  • Renomeie quaisquer aliases de coluna que correspondam a palavras-chave restritas.
  • Modifique quaisquer valores na consulta que contenham palavras-chave restritas.
  • Altere ou modifique quaisquer palavras-chave presentes na consulta, conforme necessário.

Confiável pelas melhores organizações do mundo

Suporte mais rápido e fácil, juntos