首页 > 其他分享 >mORMot 1.18 第19章 安全性

mORMot 1.18 第19章 安全性

时间:2024-05-03 10:58:58浏览次数:23  
标签:加密 19 数据库 1.18 mORMot 256 安全性 客户端

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

标签:加密,19,数据库,1.18,mORMot,256,安全性,客户端
From: https://www.cnblogs.com/hieroly/p/18164500

相关文章

  • unicode编码 asis_2019_unicorn_shop
    这题就是让我们购买第四个商品当我们输入price为1337.0的时候他会报错,显示要我们只输入一个字符那么我们就要想怎样用一个字符来表示一个比1337还要大的数字答案是unicode编码(题目的名字给了提示)上这个网站我们直接查看2000的unicode编码把这个编码复制一......
  • mORMot 1.18 第18章 使用REST/JSON的客户端/服务器
    mORMot1.18第十八章使用REST/JSON的客户端/服务器JSON是一种被多种语言和众多领先公司接受的标准。正如我们在JSON章节中所解释的,它是标准化的,紧凑且解析速度快,同时当加入非关键性空格时,也易于人类阅读。这些事实使其成为数据交换最受欢迎的格式之一。JSON支持六种数据类型:......
  • mORMot 1.18 第13章 动态数组
    mORMot1.18第13章动态数组众所周知,数组是非常有用的。但在现实生活中,情况是不可预测的,数组的元素数量或大小可能会随着时间的推移而增长。有些语言,如PHP,就使得动态数组的使用变得很简单。在使用mORMot的Delphi中,我们使用类和方法来提供这一功能。首先,让我们声明一个典型的TS......
  • mORMot 1.18 第12章 Blobs(大二进制对象)
    mORMot1.18第12章Blobs(大二进制对象)有些情况下,mORMot会以BLOBs(大二进制对象)的形式保存和检索数据。TSQLRawBlob属性用于存储像图片和文件这样的二进制数据。以TDynArray.SaveTo二进制格式存储的动态数组。明确注册为BLOBs的记录。当从数据库中存储/检索时,BLOBs以Base64......
  • 力扣198.打家劫舍*
    引言在做动态规划专题的过程中发现打家劫舍是一个十分经典的动态规划类型题,之后的好多题都有这道题的影子,比如我下一篇准备整理的740.删除并获得点数,弄明白打家劫舍真的可以算是动态规划入门了(所以这个动态规划门槛也太高了吧,我的脑子,我的脑子啊)题目你是一个专业的小偷,计划偷窃......
  • 19.3 ADG备库,数据文件SCN不更新(Bug: 29056767),导致备库异常重启后,需要重新apply很久
    故障现象:一套19.3ADG备库,备库安装完集群补丁重启后,发现需要重新apply很久以前的归档日志。分析过程:1、备库安装完补丁后,启动备库的日志恢复功能,在启动过程中报错,详细的日志如下所示。2024-04-16T18:34:40.895637+08:00BeginningStandbyCrashRecovery. Startedlogm......
  • P2192 HXY玩卡片 题解
    题目简述给定一些$5$和$0$的数字,让你在其中选择一些数进行排列成为一个非负整数,使得这个数字能被$90$整除,且是所有满足条件的数中最大的一个,无解输出$-1$。题目分析如果一个数能被$90$整除,那么它一定能被$9$和$10$整除。能被$10$整除,那就说面答案的个位数一定......
  • CF1967B2 Reverse Card (Hard Version) 题解
    题意:求有多少对\((a,b)\)满足\(b\times\gcd(a,b)\equiv0\pmod{a+b},1\lea\len,1\leb\lem\)。首先我们设\(\gcd(a,b)=G,a=i\timesG,b=j\timesG\),显然有\(\gcd(i,j)=1\)。那么可以把原条件转化为\(j\timesG\)是\((i+j)\)的倍数。因为\(\gcd(i+......
  • P1969 [NOIP2013 提高组] 积木大赛
    P1969[NOIP2013提高组]积木大赛题目春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为\(n\)的大厦,大厦可以看成由\(n\)块宽度为\(1\)的积木组成,第\(i\)块积木的最终高度需要是\(h_i\)。在搭建开始之前,没有任何积木(可以看成\(n\)块高度为......
  • R语言结合新冠疫情COVID-19对股票价格预测:ARIMA,KNN和神经网络时间序列分析
    原文链接:http://tecdat.cn/?p=24057原文出处:拓端数据部落公众号1.概要本文的目标是使用各种预测模型预测Google的未来股价,然后分析各种模型。Google股票数据集是使用R中的Quantmod软件包从YahooFinance获得的。2.简介预测算法是一种试图根据过去和现在的数据预测未来值的过......