mORMot 1.18 第19章 安全性

mORMot 1.18 第19章 安全性

第19章 安全性

在企业数据库设计中,安全性是必不可少的。mORMot已为此做好准备。

19.1 HTTP/HTTPS

您可以在四个受支持的模式中的任何一个中进行选择,它们可以组合使用。

Pascal类 描述
TSQLRestServerAuthenticationDefault mORMot安全认证,作为一种专有的双重挑战和SHA-256哈希
TSQLRestServerAuthenticationSSPI Windows认证,通过已登录的用户进行
TSQLRestServerAuthenticationNone 仅基于用户名的简单认证(较弱)
TSQLRestServerAuthenticationHttpBasic HTTP基本认证 警告:密码未加密

默认是TSQLRestServerAuthenticationDefault和TSQLRestServerAuthenticationSPPI的组合。这些指定了用于mORMot客户端的内部专有安全性,以及SPPI,即Windows HTTP认证,该认证可与Windows客户端的已登录用户ID自动配合工作。

在用户修改模型创建并添加TSQLAuthUser和TSQLAuthGroup这两个类之前,用户ID和密码不会被强制执行。

查看我们之前项目中的csclass.pas,我们的函数更改为:

function CreateSampleModel: TSQLModel;
begin
  // 安全性 - 添加安全类 *Auth*
  result := TSQLModel.Create([TSQLAuthUser, TSQLAuthGroup, TSQLSampleRecord]);
end;

然后在客户端的启动过程中添加以下行:

procedure Start;
var
  Server: AnsiString;
  userid: RawUTF8;
  password: RawUTF8;
begin
  if ParamCount = 0 then
    Server := 'localhost'
  else
    Server := AnsiString(Paramstr(1));
  Model := CreateSampleModel;
  DB := TSQLHttpClient.Create(Server, '8080', Model);
  userid := 'joe';
  password := 'synopse';
  if not DB.SetUser(userid, password) then
    raise Exception.CreateFmt('%s: 服务器拒绝了 "%s" 的凭据', [Server, userid]);
end;

重新编译客户端和服务器以满足新模型的要求。然后在一个窗口中运行服务器。

当您运行客户端时,会显示localhost: 服务器拒绝了“joe”的凭据,并且程序会停止。

尝试将userid更改为具有相同密码“synopse”的“User”,然后重新编译客户端。现在您不会收到错误,但读取和写入会失败。身份验证已成功,但授权阻止了您查看数据。

最后,在不更改密码的情况下将userid更改为“Admin”。重新编译后,程序将完美运行。我们通过了身份验证,并获得了完成工作的授权。

DB.CreateMissingTables这一行自动添加了默认的用户ID:

管理员、主管、用户和访客,密码都是“synopse”。

请务必在任何数据库上更改这些默认密码,或删除这些用户ID。

mORMot 文档中有关于用户ID和密码的最新详细信息,但在我写这篇文章的时候,SQLAuthUser 记录的 JSON 格式如下:

[{
		"AuthUser": [{
				"RowID": 1,
				"LogonName": "Admin",
				"DisplayName": "Admin",
				"PasswordHashHexa": "67aeea294e1cb515236fd7829c55ec820ef888e8e221814d24d83b3dc4d825dd",
				"GroupRights": 1,
				"Data": null
			},
			{
				"RowID": 2,
				"LogonName": "Supervisor",
				"DisplayName": "Supervisor",
				"PasswordHashHexa": "67aeea294e1cb515236fd7829c55ec820ef888e8e221814d24d83b3dc4d825dd",
				"GroupRights": 2,
				"Data": null
			},
			{
				"RowID": 3,
				"LogonName": "User",
				"DisplayName": "User",
				"PasswordHashHexa": "67aeea294e1cb515236fd7829c55ec820ef888e8e221814d24d83b3dc4d825dd",
				"GroupRights": 3,
				"Data": null
			}
		]
	},
	{
		"AuthGroup": [{
				"RowID": 1,
				"Ident": "Admin",
				"SessionTimeout": 10,
				"AccessRights": "11,1-256,0,1-256,0,1-256,0,1-256,0"
			},
			{
				"RowID": 2,
				"Ident": "Supervisor",
				"SessionTimeout": 60,
				"AccessRights": "10,1-256,0,3-256,0,3-256,0,3-256,0"
			},
			{
				"RowID": 3,
				"Ident": "User",
				"SessionTimeout": 60,
				"AccessRights": "10,3-256,0,3-256,0,3-256,0,3-256,0"
			},
			{
				"RowID": 4,
				"Ident": "Guest",
				"SessionTimeout": 60,
				"AccessRights": "0,3-256,0,0,0,0"
			}
		]
	}
]

权限是应用于用户组的。您可以创建任何您想要的组,但默认组如下所示。

提交SQL 查询SQL 认证读 认证写 表读 表写 服务
Admin
Supervisor
User
Guest

这个表格概述了不同用户组所享有的权限。例如,“Admin”组拥有所有权限,包括提交SQL查询、查询SQL、认证读写、表读写以及服务访问。相比之下,“Guest”组的权限则非常有限,只能读取表数据,无法进行其他操作。

在实际应用中,您可以根据实际需求创建和调整用户组及其权限,以满足不同用户或用户群体的访问需求。这有助于确保数据的安全性和完整性,同时提供灵活性和可管理性。

19.2 数据库加密

mORMot 支持透明的数据库加密,以保护您的数据免受未经授权的访问。您可以通过设置 TSQLModelEncryptionKey 属性来启用加密。此密钥用于在数据写入磁盘之前对其进行加密,并在读取时对其进行解密。

Model := TSQLModel.Create([...]); // 创建模型
Model.EncryptionKey := 'MySecretEncryptionKey'; // 设置加密密钥

警告: 请确保牢记加密密钥,因为如果丢失,将无法恢复加密的数据。

19.3 访问控制和权限

mORMot 提供了一个灵活的权限系统,允许您控制哪些用户可以访问数据库的哪些部分。这通过 TSQLAuthUserTSQLAuthGroup 类实现,它们允许您定义用户和组,并分配相应的权限。

例如,您可以为用户分配不同的角色,如“管理员”、“编辑者”或“查看者”,并为每个角色设置不同的权限级别。

19.4 日志和审计

为了增强安全性,mORMot 还支持详细的日志记录,以便您可以跟踪谁何时访问了哪些数据。这对于审计和合规性检查特别有用。

您可以通过配置 TSQLRestServer 的日志设置来启用日志记录,并选择要记录的信息级别。

19.5 备份和恢复

定期备份您的数据库是保护数据免受丢失或损坏的重要步骤。mORMot 提供了用于备份和恢复数据库的功能。

您可以使用 TSQLRestClientTSQLRestServer 的方法来备份数据库到文件,并在需要时从该文件恢复。

19.6 网络安全性

当通过网络与数据库通信时,确保通信的安全性至关重要。mORMot 支持通过 HTTPS 进行安全通信,您可以使用 SSL/TLS 证书来加密客户端和服务器之间的数据传输。

为了设置 HTTPS,您需要在服务器上配置 SSL/TLS 证书,并确保客户端配置为信任该证书。

小结

mORMot 提供了一个全面的安全性框架,涵盖了身份验证、授权、加密、日志记录、备份恢复和网络安全性等多个方面。当设计和实现企业数据库解决方案时,请务必考虑并应用这些安全措施来保护您的数据和系统免受潜在威胁。

热门相关:公子别秀   田园晚色:肥妇三嫁良夫   史上最强赘婿   幻影侠   弃妇当家:带着萌宝去种田