科技颠覆者 发表于 2024-5-19 01:17:26

mORMot 1.18 第19章 安全性

mORMot 1.18 第19章 安全性

第19章 安全性

在企业数据库计划中,安全性是必不可少的。mORMot已为此做好预备。
19.1 HTTP/HTTPS

您可以在四个受支持的模式中的任何一个中举行选择,它们可以组合使用。
Pascal类描述TSQLRestServerAuthenticationDefaultmORMot安全认证,作为一种专有的双重挑衅和SHA-256哈希TSQLRestServerAuthenticationSSPIWindows认证,通过已登录的用户举行TSQLRestServerAuthenticationNone仅基于用户名的简单认证(较弱)TSQLRestServerAuthenticationHttpBasicHTTP根本认证 警告:密码未加密默认是TSQLRestServerAuthenticationDefault和TSQLRestServerAuthenticationSPPI的组合。这些指定了用于mORMot客户端的内部专有安全性,以及SPPI,即Windows HTTP认证,该认证可与Windows客户端的已登录用户ID自动配合工作。
在用户修改模型创建并添加TSQLAuthUser和TSQLAuthGroup这两个类之前,用户ID和密码不会被强制执行。
检察我们之前项目中的csclass.pas,我们的函数更改为:
function CreateSampleModel: TSQLModel;
begin
// 安全性 - 添加安全类 *Auth*
result := TSQLModel.Create();
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" 的凭据', );
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 支持透明的数据库加密,以掩护您的数据免受未经授权的访问。您可以通过设置 TSQLModel 的 EncryptionKey 属性来启用加密。此密钥用于在数据写入磁盘之前对其举行加密,并在读取时对其举行解密。
Model := TSQLModel.Create([...]); // 创建模型
Model.EncryptionKey := 'MySecretEncryptionKey'; // 设置加密密钥警告: 请确保牢记加密密钥,因为如果丢失,将无法恢复加密的数据。
19.3 访问控制和权限

mORMot 提供了一个灵活的权限系统,允许您控制哪些用户可以访问数据库的哪些部分。这通过 TSQLAuthUser 和 TSQLAuthGroup 类实现,它们允许您定义用户和组,并分配相应的权限。
例如,您可以为用户分配差异的脚色,如“管理员”、“编辑者”或“检察者”,并为每个脚色设置差异的权限级别。
19.4 日记和审计

为了增强安全性,mORMot 还支持详细的日记记录,以便您可以跟踪谁何时访问了哪些数据。这对于审计和合规性检查特别有效。
您可以通过设置 TSQLRestServer 的日记设置来启用日记记录,并选择要记录的信息级别。
19.5 备份和恢复

定期备份您的数据库是掩护数据免受丢失或损坏的重要步骤。mORMot 提供了用于备份和恢复数据库的功能。
您可以使用 TSQLRestClient 或 TSQLRestServer 的方法来备份数据库到文件,并在需要时从该文件恢复。
19.6 网络安全性

当通过网络与数据库通信时,确保通信的安全性至关重要。mORMot 支持通过 HTTPS 举行安全通信,您可以使用 SSL/TLS 证书来加密客户端和服务器之间的数据传输。
为了设置 HTTPS,您需要在服务器上设置 SSL/TLS 证书,并确保客户端设置为信任该证书。
小结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: mORMot 1.18 第19章 安全性