# 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. ```sql CREATE USER WITH PASSWORD ''; ``` - Conceda os privilégios necessários ao usuário: - Banco de dados ```sql GRANT CONNECT ON DATABASE TO ; ``` - Esquema ```sql GRANT USAGE ON SCHEMA public TO ; ``` - Tabelas ```sql GRANT SELECT ON ALL TABLES IN SCHEMA public TO ; ``` - Para restringir o acesso a determinadas tabelas, revogue o acesso de *SELECT*. Consulte o script [postgres-revoke-script.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/postgres-revoke-script.pdf). ```sql --Consulta de exemplo REVOKE SELECT ON TABLE FROM ; 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 [revoke-sql-function.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/revoke-sql-function.pdf) 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. ```sql 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. ```sql SELECT sdp_revoke_execute_on_functions(''); ``` - 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 [grant-sql-function.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/grant-sql-function.pdf) para criar uma função grant. - Execute a seguinte consulta para obter os usuários. ```sql SELECT usename FROM pg_catalog.pg_user; ``` ![Usuários do Postgres](https://www.manageengine.com/userfiles/866/14262/ckfinder/images/qu/2025/2025_04_07_06_32_391.png) > 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 `` por usuários que não sejam públicos ou somente leitura. ```sql SELECT sdp_grant_execute_on_functions(''); ``` - 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. ```sql 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: ```sql 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. ```sql CREATE LOGIN WITH PASSWORD ''; CREATE USER FOR LOGIN ; ``` - Para obter os privilégios de somente leitura necessários, use os seguintes comandos. - Restrinja todos os outros comandos, exceto *SELECT*. ```sql DENY INSERT, UPDATE, DELETE ON SCHEMA :: [dbo] TO ; ``` - O comando a seguir revoga os privilégios de *SELECT* para todas as tabelas. ```sql REVOKE SELECT ON SCHEMA :: [dbo] FROM ; ``` ### Acesso restrito a tabelas no Microsoft SQL - Para fornecer acesso apenas a tabelas específicas, execute o script a partir daqui [microsoft-sql-grant-function.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/microsoft-sql-grant-function.pdf). > 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. ```sql --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 [restricted-tables.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/restricted-tables.pdf) para a lista de tabelas restritas. ```sql REVOKE SELECT ON [SchemaName].[TableName] FROM [UserName]; --ou DENY SELECT ON [SchemaName].[TableName] FROM [UserName]; ``` - Verifique se todas as outras tabelas podem ser consultadas. ```sql --Consulta de exemplo SELECT * FROM reportmoduleconfiguration; ``` - Verifique se as linhas da tabela são retornadas. Caso contrário, execute este script [microsoft-sql-grant-function.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/microsoft-sql-grant-function.pdf) e verifique novamente. - Para restringir funções SQL, execute a seguinte consulta. ```sql DENY EXECUTE ON FROM ; ``` - Para funções como xp_cmdshell, execute o seguinte ```sql 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. ```sql 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= ``` - Obtenha a chave da senha criptografada e configure-a na tag relevante. Por exemplo, ``` rodatasource.password= ``` ![Configuração database_params.conf](https://www.manageengine.com/userfiles/866/14262/ckfinder/images/qu/2025/2025_04_14_05_20_201.png) ### 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: ```sql 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 [grant-sql-function.pdf](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/grant-sql-function.pdf) 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.