【数据库系统概论】数据库的安全性和用户登录以及授权等相关功能

写在前面:这个是我自己学习数据库系统概论写的笔记,大部分都是学习的时候有不懂的用AI问答搞明白之后再整理总结出来的知识点,供以后复习以及需要的小伙伴学习。如果有错的还请大家指正,祝大家都能学习进步!

注:1.根据实际需求自定义的内容有用户名、密码、表名、数据库名等即可。2.文章的代码是SQL Sever的代码

1. 用户身份鉴别

1.定义:

身份鉴别就是确认你是不是你自己。比如,进自己家的时候,得用钥匙或者指纹才能打开门,这就是验证身份的过程。在数据库里,系统要确认你输入的用户名和密码是不是正确,才能让你进入数据库。

2.常见的身份验证方法:

  • 用户名/密码验证:最常见的方式,输入用户名和密码,数据库确认是否正确。
  • 双因素认证(2FA):除了密码,还需要用手机收到的验证码或一个动态令牌来验证身份。
  • 生物识别:像指纹、面部识别等。
  • 智能卡:例如银行卡、门禁卡等。

3.举例:

3.1在 SQL Server 中创建用户身份

这段代码就是在 SQL Server 中创建一个用户,让它能够通过用户名和密码登录数据库,并授予它读取和写入数据的权限。

-- 创建登录名 
CREATE LOGIN TestUser WITH PASSWORD = 'TestPassword123';

 -- 创建用户并分配给数据库 
USE YourDatabase; 
CREATE USER TestUser FOR LOGIN TestUser; 

-- 给用户授予读取和写入权限 
ALTER ROLE db_datareader ADD MEMBER TestUser; 
ALTER ROLE db_datawriter ADD MEMBER TestUser;

3.2代码解析(方便以后复习看):

3.2.1创建登录名:

-- 创建登录名 
CREATE LOGIN TestUser WITH PASSWORD = 'TestPassword123';
  • 固定格式部分

    • CREATE LOGIN:这是固定的 SQL 命令,表示你要创建一个登录名。
    • WITH PASSWORD = 'TestPassword123':这是你给新用户设置的密码。
  • 自命名的变量
    • TestUser:这是你创建的登录名,你可以修改为任何你希望的用户名。
    • 'TestPassword123':这是用户的密码,你可以设置成任何密码。

3.2.2创建用户并给其分配数据库:

-- 创建一个用户并关联到 SQL 登录名
USE YourDatabase;  -- 切换到你要操作的数据库
CREATE USER TestUser FOR LOGIN TestUser;
  • 固定格式部分

    • USE YourDatabase;USE 命令用于切换到指定的数据库。在这个例子中,YourDatabase 是你操作的数据库名称。
    • CREATE USER:创建一个数据库用户,绑定到之前创建的登录名。
  • 自命名的变量

    • YourDatabase:这个是你自己的数据库名称,你需要替换成实际的数据库名。
    • TestUser:你创建的用户的名称(通常和登录名相同)。如果你有多个用户,可以用不同的名字。

3.2.3给用户授予读取和写入权限 :

-- 给用户 TestUser 授予读取数据的权限
ALTER ROLE db_datareader ADD MEMBER TestUser;

-- 给用户 TestUser 授予写入数据的权限
ALTER ROLE db_datawriter ADD MEMBER TestUser;
  • 固定格式部分

    • ALTER ROLE:修改角色的成员,表示将某个用户添加到角色中。
    • db_datareader:这是一个内置角色,赋予用户读取数据的权限。
    • db_datawriter:这是另一个内置角色,赋予用户写入数据的权限。
  • 自命名的变量

    • TestUser:你要授权的用户,可以根据需求替换为你实际创建的用户名。
    • db_datareaderdb_datawriter:这两个是 SQL Server 提供的内置角色。你不需要修改它们,但你可以根据需求创建自己的自定义角色(如 data_vieweradmin)。

2. 存取控制

1.定义:

存取控制是指验证了用户身份之后,决定该用户能访问哪些资源。打个比方,你进了自己家,门打开了,但是你能进哪个房间(书房、卧室、厨房)得看你是不是有权限。

2.常见的存取控制方式:

  • 自主存取控制(DAC):用户自己决定谁能访问自己的资源。比如,你可以决定把某个文件共享给别人。
  • 强制存取控制(MAC):系统严格规定谁能访问什么数据,用户不能随便更改这些权限。
  • 基于角色的存取控制(RBAC):根据你在公司里的角色来决定你能做什么,比如经理能做的事情和普通员工是不一样的。

3.在 SQL Server 中,使用角色来控制权限

  • SQL Server 有一些内置角色,比如:
    • db_datareader:可以读取数据库中的所有数据。
    • db_datawriter:可以修改数据库中的数据。
    • db_owner:完全控制数据库的所有权限。

你可以根据用户的角色来决定他们能做什么。假设我们要创建一个名为 db_manager 的角色,并为这个角色授予一些管理数据库表格的权限(例如:允许该角色管理整个数据库模式 dbo 下的表格)。同时,将用户 TestUser 添加到这个角色中,这样 TestUser 就可以执行相应的操作了。这段代码会让 TestUser 用户拥有读取和写入数据库的权限。

-- 1. 创建一个自定义角色 db_manager
CREATE ROLE db_manager;  -- 角色名可以修改为其他名称,例如 admin_role

-- 2. 将用户 TestUser 添加到 db_manager 角色
ALTER ROLE db_manager ADD MEMBER TestUser;  -- 用户名可以修改为其他用户名,例如 john_doe

-- 3. 授予 db_manager 角色 ALTER 权限(可以修改 dbo 模式下的表格)
GRANT ALTER ON SCHEMA::dbo TO db_manager;  -- 你可以修改 dbo 为其他模式名称,如 sales、hr

3.1.创建自定义角色

-- 创建一个新的角色 
db_manager CREATE ROLE db_manager;
  • 固定格式部分

    • CREATE ROLE db_manager;CREATE ROLE 是 SQL Server 的固定命令,用来创建一个新的角色。db_manager 是你自定义的角色名,可以根据需要修改。
  • 自命名的变量

    • db_manager:这是角色的名称,你可以自定义为 admin_roledata_analyst_role 等,根据不同的应用场景修改。

3.2.将用户添加到角色中

-- 给用户 TestUser 添加一个 db_manager 角色 
ALTER ROLE db_manager ADD MEMBER TestUser;
  • 固定格式部分

    • ALTER ROLE db_manager ADD MEMBER TestUser;ALTER ROLE 是 SQL Server 的固定命令,用来修改角色。ADD MEMBER 表示将用户添加到角色中。
  • 自命名的变量

    • db_manager:你要修改的角色名称,可以是任意你创建的角色名称。
    • TestUser:你要添加到角色中的用户名,必须是数据库中已存在的用户。如果你要添加不同的用户,只需修改为相应的用户名。

3. 3给角色授予权限(管理表格权限)

-- 给 db_manager 角色授予 ALTER 权限(可以修改数据库表格) 
GRANT ALTER ON SCHEMA::dbo TO db_manager;
  • 固定格式部分

    • GRANT ALTER ON SCHEMA::dbo TO db_manager;GRANT 是 SQL Server 的固定命令,用来授予权限。ALTER 是权限类型,表示允许修改表格或其他数据库对象。SCHEMA::dbo 表示你授予权限的数据库模式(schema)是 dbo,这是数据库默认的模式。TO db_manager 表示将这些权限授予 db_manager 角色。
  • 自命名的变量

    • ALTER:这是你授予角色的权限类型,可以是其他权限类型,如 SELECTINSERTDELETEEXECUTE 等,具体取决于你希望角色能够执行哪些操作。
    • SCHEMA::dbodbo 是默认的数据库模式名,你可以修改为其他模式(例如:saleshr 等)。
    • db_manager:这是你要授予权限的角色名。

4.扩展:多个角色和更复杂的权限控制

假设你要创建多个角色并分别授予不同的权限,以下是一个更加完整的示例:

-- 1. 创建自定义角色:管理员角色 db_admin 和普通用户角色 db_user 
CREATE ROLE db_admin; 
CREATE ROLE db_user; 

-- 2. 将用户添加到相应的角色中 
ALTER ROLE db_admin ADD MEMBER AdminUser; 
ALTER ROLE db_user ADD MEMBER NormalUser; 

-- 3. 授予 db_admin 角色完全控制权限(db_owner) 
GRANT CONTROL ON SCHEMA::dbo TO db_admin; 

-- 4. 授予 db_user 角色只读权限(db_datareader) 
GRANT SELECT ON SCHEMA::dbo TO db_user;
  • db_admin 角色被授予 CONTROL 权限,这意味着它可以执行所有操作(完全控制)。
  • db_user 角色只被授予 SELECT 权限,表示只能读取数据,不能修改或删除数据。

5.总结

在 SQL Server 中:

  • 固定格式的部分CREATE ROLEALTER ROLEGRANTSCHEMA::dbo 等是 SQL 的固定命令,你需要按照这些格式编写。
  • 自命名的变量:角色名、用户名、权限类型和模式名称等是可以自定义的。你可以根据实际需求命名角色、用户,并设置合适的权限。

3. 存取控制模型:DAC、MAC、RBAC

1. DAC(自主存取控制) — 自由控制自己的数据资源

1.定义

DAC 允许用户完全控制自己拥有的数据或资源。在数据库中,这意味着用户对自己创建的对象(如表格、视图、存储过程等)有完全的访问控制权。用户可以决定谁能查看、修改、删除这些数据。

2.扩展

  • 在 DAC 模型下,数据的所有者有权控制谁能够访问他们的数据。
  • 数据的所有者可以通过权限授予(GRANT)和权限撤回(REVOKE)来管理其他用户对自己数据的访问。

3.代码示例

假设你有一个表格 Employees,并希望将读取和修改权限授予某个用户 TestUser

-- 假设你已经创建了 Employees 表 
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(100), Salary DECIMAL ); 

-- 用户创建表格后可以授予其他用户访问权限 
-- 授予 TestUser 读取权限 
GRANT SELECT ON Employees TO TestUser; 

-- 授予 TestUser 修改权限 
GRANT UPDATE, DELETE ON Employees TO TestUser; 

-- 如果要撤回权限,可以使用 
REVOKE REVOKE UPDATE, DELETE ON Employees FROM TestUser;
  • 固定格式部分

    • GRANT SELECT:授予用户读取权限,SELECT 是固定的 SQL 权限类型。
    • GRANT UPDATE, DELETE:授予用户修改和删除权限。
    • REVOKE:撤回之前授予的权限。
  • 自命名的变量

    • Employees:这是你创建的表格名称,可以更改为任何你创建的表格名。
    • TestUser:用户的名称,你可以将其更改为实际的用户名。
    • SELECTUPDATEDELETE:这些是 SQL Server 中的权限类型,可以更改为其他权限,如 INSERTEXECUTE 等。

4.权限控制

  • DAC 允许用户决定权限的传递,也就是你可以允许某个用户将自己的权限授予其他用户,或者撤回已授予的权限。

例如:

-- 授予 TestUser 将权限传递给其他用户的能力 
GRANT SELECT ON Employees TO TestUser WITH GRANT OPTION; 

-- 用户 TestUser 可以将自己的 SELECT 权限授予其他用户 
GRANT SELECT ON Employees TO AnotherUser;
  • WITH GRANT OPTION 允许用户将自己获得的权限进一步传递给其他用户。

2. MAC(强制存取控制) — 系统强制控制权限

1.定义

在 MAC 模型中,用户不能自主决定谁能访问他们的资源。权限的授予和访问是由管理员或系统通过安全标签来强制执行的。数据库中的权限是基于用户的安全级别或敏感性标签来控制的。

2.扩展

  • MAC 通常用于需要高安全性的环境,如军事、政府部门等,在这些环境中,系统会根据用户的角色和安全级别来决定访问权限。
  • 在 SQL Server 中,虽然没有直接的 MAC 模型实现,但可以通过使用安全级别来模拟。

3.代码示例

你可以通过创建角色并控制角色对数据库模式的访问来模拟 MAC:

-- 创建一个角色 db_admin(管理员) 
CREATE ROLE db_admin; 

-- 创建一个普通角色 db_user 
CREATE ROLE db_user; 

-- 创建一个用户,并分配到 db_admin 角色 
CREATE USER AdminUser FOR LOGIN AdminUserLogin; 
ALTER ROLE db_admin ADD MEMBER AdminUser; 

-- 创建普通用户,并分配到 db_user 角色 
CREATE USER NormalUser FOR LOGIN NormalUserLogin; 
ALTER ROLE db_user ADD MEMBER NormalUser; 

-- 管理员(db_admin)角色可以访问所有表格,普通用户(db_user)只能读取数据 
GRANT CONTROL ON SCHEMA::dbo TO db_admin; -- 管理员可以控制整个 dbo 模式 
GRANT SELECT ON SCHEMA::dbo TO db_user; -- 普通用户只能读取 dbo 模式中的数据
  • 固定格式部分

    • CREATE ROLE db_adminCREATE ROLE db_user:创建数据库角色。
    • GRANT CONTROL:授予 db_admin 角色对整个数据库模式的完全控制权限。
    • GRANT SELECT:授予 db_user 角色只读权限。
  • 自命名的变量

    • db_admindb_user:你创建的角色名,表示管理员和普通用户。
    • AdminUserNormalUser:你创建的数据库用户,可以根据需求进行更改。
    • SCHEMA::dbo:指定数据库模式,dbo 是数据库的默认模式,你可以选择其他模式。

3. RBAC(基于角色的存取控制) — 根据用户角色授予权限

1.定义

RBAC 模型通过用户的角色来控制权限。在这种模型中,用户的权限不是直接授予的,而是通过分配到一个角色来间接获得权限。角色通常是根据用户的职能、职位或责任来定义的。

2.扩展

  • SQL Server 使用角色来管理权限。例如,db_datareader 角色可以让用户读取数据库中的所有数据,db_datawriter 角色可以让用户写入数据。
  • 角色的管理是集中式的,管理员只需要管理角色权限,而不需要为每个用户单独设置权限。

3.代码示例

-- 创建一个角色 db_manager(管理员角色) 
CREATE ROLE db_manager; 

-- 将用户 AdminUser 添加到 db_manager 角色 
ALTER ROLE db_manager ADD MEMBER AdminUser; 

-- 创建另一个角色 db_employee(普通员工角色) 
CREATE ROLE db_employee; 

-- 将用户 EmployeeUser 添加到 db_employee 角色 
ALTER ROLE db_employee ADD MEMBER EmployeeUser; 

-- db_manager 角色有完全控制权限 
GRANT CONTROL ON SCHEMA::dbo TO db_manager; 

-- db_employee 角色只能查询数据 
GRANT SELECT ON SCHEMA::dbo TO db_employee;
  • 固定格式部分

    • CREATE ROLE db_managerCREATE ROLE db_employee:创建自定义角色。
    • GRANT CONTROL:授予管理员角色完全的控制权限。
    • GRANT SELECT:授予普通员工角色读取数据的权限。
  • 自命名的变量

    • db_managerdb_employee:你创建的角色名称,可以根据实际情况命名。
    • AdminUserEmployeeUser:实际的数据库用户名称。
    • SCHEMA::dbo:指定数据库模式名,通常是 dbo,但你可以根据需要更改。

4.关于权限赋予(GRANT)、权限收回(REVOKE)、权限传递(WITH GRANT OPTION

1.权限赋予、收回及是否允许用户将权限赋给他人的功能,就是在 DAC 和 RBAC 中控制权限时的关键点。以下是如何进行这些操作的 SQL 代码:

1.1权限赋予(GRANT)

-- 将 SELECT 权限授予用户 TestUser
GRANT SELECT ON dbo.Employees TO TestUser;
  • 固定格式部分

    • GRANT:这是 SQL Server 中用来授予权限的关键字,固定格式,不可以修改。
    • SELECT:这是权限类型,表示授予用户对某个对象(如表、视图等)的查询权限。权限类型可以是 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等。
    • ON:这是 SQL Server 中的固定格式,表示对哪个对象(如表、视图等)授予权限。
    • TO:用来指定权限授予给谁,后面跟着用户名或角色名。
  • 自定义变量

    • dbo.Employees:这是你要授予权限的数据库对象。在这个示例中,dbo.Employees 是表名,dbo 是表所在的数据库模式(schema)。你可以根据需要更改为你实际的表名或视图名。
    • TestUser:这是你授予权限的用户或角色名。你可以将其替换为数据库中实际的用户名或角色名。

1.2权限收回(REVOKE)

-- 撤销 TestUser 对 Employees 表的 SELECT 权限 
REVOKE SELECT ON dbo.Employees FROM TestUser;
  • 固定格式部分

    • REVOKE:SQL Server 中用来撤销权限的固定关键字。
    • SELECT:权限类型,表示你要撤销的权限类型。可以是 SELECTINSERTUPDATE 等。
    • ON:表示要撤销权限的对象。
    • FROM:表示从哪个用户或角色撤回权限。
  • 自定义变量

    • dbo.Employees:指定要撤销权限的数据库对象。在此例中是 Employees 表,你可以根据实际情况修改为其他表或视图名。
    • TestUser:指定撤回权限的目标用户或角色名。可以修改为实际的用户或角色。

1.3权限传递(WITH GRANT OPTION)

-- 授予 TestUser 权限,并允许他将权限传递给其他用户 
GRANT SELECT ON dbo.Employees TO TestUser WITH GRANT OPTION;

  • 固定格式部分

    • GRANT:固定关键字,用来授予权限。
    • SELECT:权限类型,表示授予查询数据的权限。你可以根据需求选择其他权限类型,如 INSERTUPDATE 等。
    • ON:固定关键字,用来指定授予权限的对象。
    • TO:固定关键字,用来指定用户或角色。
    • WITH GRANT OPTION:这个选项是用来允许用户将自己获得的权限进一步授予给其他用户。WITH GRANT OPTION 是固定格式,不能修改。
  • 自定义变量

    • dbo.Employees:这是你授予权限的数据库对象(表、视图等),你可以修改为实际的对象名。
    • TestUser:这是你要授予权限的用户或角色名。可以根据实际情况修改为你要赋予权限的目标用户。

1.4收回传递权限

-- 收回 TestUser 将权限传递给其他用户的能力 
REVOKE GRANT OPTION FOR SELECT ON dbo.Employees FROM TestUser;
  • 固定格式部分

    • REVOKE:固定命令,用来撤销之前授予的权限或权限的传递能力。
    • GRANT OPTION:固定关键字,表示撤销用户将其权限传递给其他用户的能力。
    • FOR:固定格式,表示撤销哪个权限的传递能力。
    • SELECT:权限类型,表示收回对 SELECT 权限的传递能力。可以是其他权限类型。
    • ON:表示哪个对象的权限被撤销。
    • FROM:表示撤销权限传递的用户或角色。
  • 自定义变量

    • dbo.Employees:这是你要收回权限的数据库对象,通常是表或视图名。
    • TestUser:这是你收回权限传递能力的用户或角色。可以更改为任何目标用户。

2.总结:

2.1存取控制模型:DAC、MAC、RBAC:

  • DAC:用户可以控制自己拥有的资源,决定谁可以访问自己的数据。
  • MAC:系统或管理员控制访问权限,用户无法自己决定谁能访问数据。
  • RBAC:用户的权限由角色决定,角色通常基于职位或职责来分配。

2.2权限赋予和收回952f8041cd454c01a224469000e87ec2.pngba3acbaa054c41b4b79c5f5754276f20.png

你可以通过 GRANTREVOKE 来管理用户的权限。如果你希望用户能将权限传递给他人,可以使用 WITH GRANT OPTION,反之,通过 REVOKE GRANT OPTION 来撤回权限传递能力。


5. 安全审计和入侵检测*

1.入侵检测定义:

入侵检测是指监控并记录数据库中的访问活动,防止非法访问。SQL Server 提供了审计功能,允许你跟踪哪些用户在什么时间做了哪些操作。

2.启用 SQL Server 审计功能:

这样,SQL Server 会记录用户登录、失败登录等事件,管理员可以查看这些日志,确保没有不正常的访问。

-- 创建一个审计 
CREATE SERVER AUDIT Audit_TestUser 
TO FILE (FILEPATH = 'C:\AuditLogs\') -- 审计日志保存的路径 
WITH (ON_FAILURE = CONTINUE); -- 如果审计失败继续运行 


-- 创建审计规格(定义要审计的事件) 
CREATE SERVER AUDIT SPECIFICATION AuditSpec_TestUser 
FOR SERVER AUDIT Audit_TestUser 
ADD (FAILED_LOGIN_GROUP), -- 审计失败的登录事件 
ADD (SUCCESSFUL_LOGIN_GROUP) -- 审计成功的登录事件 
WITH (STATE = ON); -- 启动审计
  • 固定格式部分

    • CREATE SERVER AUDIT:创建一个审计任务,这个任务将记录特定的事件(如用户登录、失败的登录尝试等)。
    • TO FILE (FILEPATH = 'C:\AuditLogs\'):指定日志文件存储的路径,通常是你机器上一个合适的文件夹。
    • CREATE SERVER AUDIT SPECIFICATION:定义哪些事件需要被记录到审计日志中。
    • WITH (STATE = ON):启用审计功能。
  • 自命名的变量

    • Audit_TestUser:这是你给审计任务起的名字。你可以用任何名字,但通常会根据审计目标命名,例如 Audit_LoginEvents
    • 'C:\AuditLogs\':这是审计日志文件保存的路径,应该替换成你希望存储日志的路径。
    • FAILED_LOGIN_GROUPSUCCESSFUL_LOGIN_GROUP:这是审计日志的事件类型。你可以根据需求选择更多的事件进行审计。

6.总结:

1.用户身份鉴别

在 SQL Server 中,你可以通过用户名和密码验证用户身份,也可以通过 Windows 身份验证来确认用户。

2.存取控制

确保用户在登录后只能访问他们有权限的数据。SQL Server 提供了基于角色的存取控制(RBAC),以及自主存取控制(DAC)和强制存取控制(MAC)的模拟。

3.审计与安全

通过审计功能,可以追踪和记录数据库中的操作,帮助管理员监控和防范安全问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

精神病不行计算机不上班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值