# Informe de consulta: Configuración de usuario de solo lectura Un usuario de solo lectura en una base de datos tiene permisos exclusivos para leer información y ejecutar informes de consulta. Esta configuración garantiza consultas seguras y bloquea el acceso a datos confidenciales dentro de la base de datos de la aplicación. **Rol requerido**: Administrador de la organización, SDAdmin, usuarios con el permiso de **Crear informe de consulta** > Se requiere experiencia en SQL para configurar usuarios de solo lectura. *Contenido* - Configurar un usuario de solo lectura en Postgres. - Configurar un usuario de solo lectura en la base de datos Microsoft SQL. - Solucionar fallas de informes de consulta. ## Configurar un usuario de solo lectura en Postgres - Conéctese a la base de datos de la aplicación como un usuario con permiso para crear un rol/usuario. > En los scripts, reemplace los valores dentro de <> según su preferencia. - Cree un usuario con credenciales de inicio de sesión. ```sql CREATE USER WITH PASSWORD ''; ``` - Otorgue los privilegios necesarios al usuario: - Base de datos ```sql GRANT CONNECT ON DATABASE TO ; ``` - Esquema ```sql GRANT USAGE ON SCHEMA public TO ; ``` - Tablas ```sql GRANT SELECT ON ALL TABLES IN SCHEMA public TO ; ``` - Para restringir el acceso a ciertas tablas, revoque el acceso *SELECT*. Consulte el script [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/postgres-revoke-script.pdf). ```sql --Consulta de ejemplo REVOKE SELECT ON TABLE FROM ; REVOKE SELECT ON aaapassword TABLE FROM readonlyuser; ``` - Para restringir funciones de postgres, elimine el permiso de ejecución del rol público mediante comandos de Lenguaje de Control de Datos (DCL). - Use este [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/revoke-sql-function.pdf) script para crear una función de *revoke*. Después de crear una función de *revoke*, ejecute la siguiente consulta para eliminar el permiso de ejecución para los usuarios públicos. ```sql SELECT sdp_revoke_execute_on_functions('public'); ``` - Ejecute la siguiente consulta para revocar los permisos de *execute* para funciones de un usuario de solo lectura. ```sql SELECT sdp_revoke_execute_on_functions(''); ``` - Como los privilegios de *revoke* solo se pueden proporcionar para roles públicos, puede restaurar los privilegios del rol público para los usuarios de forma individual. Para restaurar los privilegios de *revoke* para otros usuarios, otorgue permisos de *execute* a todos los usuarios excepto a los usuarios públicos y de solo lectura. Use este script [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/grant-sql-function.pdf) para crear una función grant. - Ejecute la siguiente consulta para obtener los usuarios. ```sql SELECT usename FROM pg_catalog.pg_user; ``` ![ ](https://www.manageengine.com/userfiles/866/14262/ckfinder/images/qu/2025/2025_04_07_06_32_391.png) > Los usuarios mencionados en la captura de pantalla son solo de referencia. - Ejecute la siguiente consulta para otorgar privilegios de función pública a otros usuarios. Reemplace ** por usuarios distintos de los usuarios públicos o de solo lectura. ```sql SELECT sdp_grant_execute_on_functions(''); ``` - Para verificar si la restricción se ha aplicado, conéctese a la base de datos como el usuario de solo lectura recién creado y asegúrese de que las consultas restringidas sean denegadas. ```sql SELECT pg_sleep(10); ``` - De forma predeterminada, ciertas palabras y tablas están restringidas para consulta. Para obtener esas palabras clave, use el siguiente script: ```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 un usuario de solo lectura en la base de datos Microsoft SQL > En Microsoft SQL, no puede configurar un usuario de solo lectura cuando la base de datos está vinculada al servidor de aplicaciones mediante autenticación de Windows. - Conéctese a la base de datos Microsoft SQL como un usuario que tenga el rol *CREATE USER* o *LOGIN*. - Conéctese a la consola de consultas con la base de datos de la aplicación y cree un usuario con credenciales de inicio de sesión. ```sql CREATE LOGIN WITH PASSWORD ''; CREATE USER FOR LOGIN ; ``` - Para lograr los privilegios requeridos de solo lectura, use los siguientes comandos. - Restrinja todos los demás comandos excepto *SELECT*. ```sql DENY INSERT, UPDATE, DELETE ON SCHEMA :: [dbo] TO ; ``` - El siguiente comando revoca los privilegios de *SELECT* para todas las tablas. ```sql REVOKE SELECT ON SCHEMA :: [dbo] FROM ; ``` ### Acceso restringido a tablas en Microsoft SQL - Para proporcionar acceso solo a tablas específicas, ejecute el script desde aquí [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/microsoft-sql-grant-function.pdf). > Ignore los problemas relacionados con que no se encuentre una tabla u objeto. - Para verificar si la restricción se ha aplicado, inicie sesión en la base de datos como el usuario recién creado, ejecute las siguientes consultas y asegúrese de que las tablas restringidas no se consulten. ```sql --Consulta de ejemplo SELECT * FROM aaapassword; ``` - Si el resultado de la consulta muestra un mensaje de restricción de tabla SQL, la restricción de tablas se ha logrado. - Si no se logra la restricción de tablas, siga estos comandos y vuelva a comprobar. Consulte aquí [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/restricted-tables.pdf) para la lista de tablas restringidas. ```sql REVOKE SELECT ON [SchemaName].[TableName] FROM [UserName]; --o DENY SELECT ON [SchemaName].[TableName] FROM [UserName]; ``` - Verifique si todas las demás tablas están permitidas para consulta. ```sql --Consulta de ejemplo SELECT * FROM reportmoduleconfiguration; ``` - Verifique si se devuelven las filas de la tabla. Si no es así, ejecute este script [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/microsoft-sql-grant-function.pdf) y vuelva a comprobar. - Para restringir funciones SQL, ejecute la siguiente consulta. ```sql DENY EXECUTE ON FROM ; ``` - Para una función como xp_cmdshel, ejecute lo siguiente ```sql DENY EXECUTE ON xp_cmdshell FROM rouser ``` - De forma predeterminada, algunas tablas y palabras no se pueden consultar. Obtenga esas palabras usando la siguiente 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 ); ``` ### Obtener la clave cifrada de la contraseña - Vaya a **[ServiceDesk Plus Home]\bin** en el símbolo del sistema. - Ejecute el archivo **encrypt.bat**. - Escriba la contraseña del usuario de solo lectura y presione Enter. - Copie la clave de cifrado de la contraseña que se muestra en el símbolo del sistema y guárdela en una ubicación segura. - Vaya a {SDP_Home}/ServiceDesk/conf. - Abra el archivo **database_params.conf**. - Configure el nombre de usuario en la etiqueta correspondiente. Por ejemplo, ```text rodatasource.username= ``` - Obtenga la clave de la contraseña cifrada y configúrela en la etiqueta correspondiente. Por ejemplo, ```text rodatasource.password= ``` ![ ](https://www.manageengine.com/userfiles/866/14262/ckfinder/images/qu/2025/2025_04_14_05_20_201.png) ### Actualizar indicador de base de datos - Después de crear el usuario, conecte la aplicación a la base de datos y ejecute la siguiente consulta. Esto permitirá que el usuario de solo lectura cree informes de consulta seguros que no obtengan datos de las tablas restringidas: ```sql UPDATE ReportModuleConfiguration SET PARAMVALUE = 'true' WHERE CATEGORY LIKE 'ROUser' AND PARAMETER LIKE 'Use_ROUser'; ``` - Reinicie la aplicación para que los cambios surtan efecto. ## Solucionar fallas de informes de consulta **1. Fallas de respaldo en Postgres integrado.** Si se produce una falla de respaldo debido a problemas de permisos, use este script [ ](https://dzf8vqv24eqhg.cloudfront.net/userfiles/866/14262/ckfinder/files/grant-sql-function.pdf) para restaurar los permisos necesarios para los usuarios de la base de datos de la aplicación (sdpadmin). **2. En la base de datos Microsoft SQL, el informe de consulta falla con el mensaje de error "Restricted table(s) found in query."** - Asegúrese de que la consulta no esté accediendo a tablas restringidas. - Cambie el nombre de cualquier alias de columna que coincida con palabras clave restringidas. - Modifique cualquier valor en la consulta que contenga palabras clave restringidas. - Cambie o modifique cualquier palabra clave presente en la consulta según sea necesario.