只读用户

只读用户

只读用户拥有读取数据库信息、修改选择数据和执行安全查询报表的专属权限,以提高应用程序的安全级别。

 

您可以在ESM 目录 或Admin检查应用程序的安全级别
只有在应用程序中配置了外部数据库(如外部 Postgres 或 MSSQL)时,才能创建只读用户。  对于捆绑的 Postgres,应用程序默认内置只读用户。

 

角色要求: SDOrgAdmin/SDAdmin; 有创建查询报表权限的用户。

创建只读用户

请参阅以下要点,了解如何根据所使用的数据库创建用户:

 

  • Postgres 数据库: 执行以下查询在数据库中创建用户。

CREATE USER <username> WITH LOGIN PASSWORD <password>;
GRANT CONNECT ON DATABASE 
<databaseName> TO <username>;
GRANT USAGE ON SCHEMA public TO 
<username>;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO 
<username>;

  • 为所有表格授予相关权限。
  • 撤销表格访问权限可以使用下面的查询来查找包含私人数据或无关数据的文件: REVOKE SELECT ON <tableName> FROM <username>. 例如: REVOKE SELECT ON passwordtable FROM rouser;

 

  • MSSQL 数据库: 执行以下查询,在数据库中创建一个用户。

CREATE LOGIN <username> WITH PASSWORD <password>;
CREATE USER 
<username> FOR LOGIN <username>;

  • 执行查询阻止用户执行命令,并取消用户对数据库中所有表的访问权限。 只允许访问指定的表。

DENY INSERT, UPDATE, DELETE ON SCHEMA :: [dbo] TO <userName>;
REVOKE SELECT ON SCHEMA :: [dbo] FROM 
<userName>;
declare commands cursor for
SELECT 'GRANT SELECT ON [dbo].' + QUOTENAME(t.TABLE_NAME) + ' TO 
<userName>;'
FROM TableDetails t
WHERE t.TABLE_NAME NOT LIKE 'AaaAccHttpSession' AND t.TABLE_NAME NOT LIKE 'AaaPassword' AND t.TABLE_NAME NOT LIKE 'RememberMeDetails' AND t.TABLE_NAME NOT LIKE 'ADSTFAUserEnrollment' AND t.TABLE_NAME NOT LIKE 'CustomFunctionDetails' AND t.TABLE_NAME NOT LIKE 'AdminAuditHistoryJson' AND t.TABLE_NAME NOT LIKE 'MobileAuthKey' AND t.TABLE_NAME NOT LIKE 'COMMONPASSWORD' AND t.TABLE_NAME NOT LIKE 'PasswordInfo' AND t.TABLE_NAME NOT LIKE 'PasswordResetLink' AND t.TABLE_NAME NOT LIKE 'BackupSchedule' AND t.TABLE_NAME NOT LIKE 'DBCredentialsAudit' AND t.TABLE_NAME NOT LIKE 'ChatJson' AND t.TABLE_NAME NOT LIKE 'ThrottleExceedingHistory' AND t.TABLE_NAME NOT LIKE 'UserAdditionalFields_multiselect' AND t.TABLE_NAME NOT LIKE 'UserAdditionalFields_history' AND t.TABLE_NAME NOT LIKE 'UserAdditionalFields_historydiff' AND t.TABLE_NAME NOT LIKE 'CustomPickListValues' AND t.TABLE_NAME NOT LIKE 'CustomModuleInstance' AND t.TABLE_NAME NOT LIKE 'CustomModuleInstanceImages' AND t.TABLE_NAME NOT LIKE 'CustomModuleDescription' AND t.TABLE_NAME NOT LIKE 'CustomModuleHistory' AND t.TABLE_NAME NOT LIKE 'CustomModuleHistoryDiff' AND t.TABLE_NAME NOT LIKE 'CM_Tasks' AND t.TABLE_NAME NOT LIKE 'CM_Comments' AND t.TABLE_NAME NOT LIKE 'CM_Attachments' AND t.TABLE_NAME NOT LIKE 'Custom_001' AND t.TABLE_NAME NOT LIKE 'Custom_MultiSelect_001';

declare @cmd varchar(max)

open commands
fetch next from commands into @cmd
while @@FETCH_STATUS=0
begin
exec(@cmd)
fetch next from commands into @cmd
end

close commands
deallocate commands

  • 获取密码的加密密钥。
    • 在命令提示符下转到 [ServiceDesk Plus Home]\bin.
    • 执行文件 encrypt.bat。
    • 键入只读用户密码并单击 Enter。
    • 复制命令提示符中显示的密码加密密钥并将其存储在安全位置。
  • 转到 {SDP_Home}/ServiceDesk/conf.
    • 打开 database_params.conf 文件。
    • 在相关标记中配置用户名。例如:rodatasource.username=<username>。
    • 获取加密密码密钥,并将其配置到相关标记中。例如:rodatasource.password=<password>。

 


 

更新数据库标志

  • 创建用户后,将应用程序连接到数据库并执行以下查询。这将允许只读用户创建不从受限表中获取数据的安全查询报表: UPDATE ReportModuleConfiguration SET PARAMVALUE = 'true' WHERE CATEGORY LIKE 'ROUser' AND PARAMETER LIKE 'Use_ROUser'。
  • 重新启动应用程序,使变更生效。

恢复 ServiceDesk Plus

从备份数据恢复 ServiceDesk Plus 时

  • 如果数据库设置没有变更,请在恢复数据后更新数据库标志。
  • 如果修改了数据库或应用程序设置,请按照上述方法重新创建只读用户。

限制数据库函数的执行

用于 Postgrest 数据库:

必须限制干扰或减缓查询报表生成速度的行政功能。 


要限制 postgres 功能,请使用数据控制语言 (DCL) 命令删除公共角色的执行权限。

  • 下载以下文件: 
  • 复制并执行文件中的查询。
  • 查询结果中将列出干扰查询报告的功能。
  • 将查询结果复制到下面的查询中,以撤销公共用户的执行权限:

REVOKE EXECUTE ON FUNCTION <insert query result> FROM public;

  • 将查询结果复制到下面的查询中,以撤销只读用户的执行权限:

REVOKE EXECUTE ON FUNCTION <insert query result> FROM <Read-Only User name>;

  • 将查询结果复制到下面的查询中,向除公共用户和只读用户外的所有用户授予执行权限:

GRANT EXECUTE ON FUNCTION <insert query result> TO <users except Read-Only User and public>;

用于 MSSQL 数据库:

  • 手动获取要限制的功能。
  • 撤销公共用户和只读用户的执行权限。 使用以下查询撤销只读用户的权限:

DENY EXECUTE ON [dbo].<FunctionName> TO <Read-Only User Name>;

  • 手动授予用户执行权限,公共用户和只读用户除外。
 每次更新 ServiceDesk Plus 的构建版本后,都必须限制公共用户和只读用户使用干扰查询报告的管理功能。

限制只读用户使用的表:

  • AaaAccHttpSession
  • AaaPassword
  • RememberMeDetails
  • CustomFunctionDetails
  • AdminAuditHistoryJson
  • MobileAuthKey
  • CommonPassword
  • PasswordInfo
  • PasswordResetLink
  • BackupSchedule
  • CustomModuleInstance
  • CustomModuleDescription
  • CustomModuleHistory
  • CustomModuleHistoryDiff
  • CM_Tasks
  • CM_Comments
  • CM_Attachments
  • Custom_001
  • Custom_MultiSelect_001

获取内部表的查询

默认情况下,限制用户查看内部表格,以避免暴露敏感数据。


要查看内部表,管理员可以执行以下查询。

For MSSQL Database: 

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 );

For Postgres Database: 

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;

不执行内部表名中包含关键字的查询。