实验9 数据库安全性控制
数据库的安全性是指数据库的任何部分都不允许受到恶意侵害或未经授权地存取和修改。数据库管理系统必须提供可靠的保护措施,确保数据库的安全性。数据库管理系统一般采用用户标识和鉴别、存取控制、视图、加密存储、审计等技术进行安全控制。
【实验目的】
①理解数据库安全的重要性。
②理解MySQL用户管理、角色管理和权限管理。
③掌握创建、更名、修改登录账户口令和删除登录账户的方法。
④掌握创建、激活、删除角色以及将用户添加为角色成员的方法。
⑤掌握授予和撤销数据库权限的方法。
【知识要点】
(1)用户管理
MySQL用户包括root用户和普通用户,root用户是超级管理员,拥有所有的权限,而普通用户只拥有创建该用户时赋予它的权限。在MySQL数据库中,为了防止非授权用户对数据库进行存取,DBA可以创建登录用户、修改用户信息和删除用户。
1)创建普通用户的语法格式
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED WITH auth_plugin [initial_auth_option]
}
}
2)重命名用户的语法格式
RENAME USER old_user TO new_user
[, old_user TO new_user] ...
3)修改用户口令语法格式
SET PASSWORD [FOR user] auth_option
[REPLACE 'current_auth_string']
[RETAIN CURRENT PASSWORD]
auth_option: {
= 'auth_string'
| TO RANDOM
}
4)删除用户的语法格式
DROP USER [IF EXISTS] user [, user] ...
在 MySQL中,可以使用 DROP USER 语句删除用户,也可以直接在 mysql.user 表中删除用户以及相关权限。
(2)角色
角色可以看作一个权限的集合,这个集合有一个统一的名字,称为角色名。可以给多个数据库用户授予同个角色的权限,权限变更可直接通过修改角色来实现,不需要对每个用户逐个去变更,方便运维和管理。角色可以创建、删除、修改并作用到它管理的用户上。
1)创建角色的语法格式
CREATE ROLE [IF NOT EXISTS] role [, role ] ...
2)为用户分配角色的语法格式
GRANT role [, role] ...
TO user_or_role [, user_or_role] ...
[WITH ADMIN OPTION]
3)角色激活的语法格式
SET DEFAULT ROLE
{NONE | ALL | role [, role ] ...}
TO user [, user ] ...
4)角色撤销的语法格式
REVOKE [IF EXISTS] role [, role ] ...
FROM user_or_role [, user_or_role ] ...
[IGNORE UNKNOWN USER]
使用REVOKE语句回收分配给用户的角色,回收后用户不再具有角色拥有的权限。
(3)权限管理
用户若要对某个数据库进行修改或访问,必须具有相应的权限,这种权限涉及库、表和字段3种级别。权限既可以直接获得,也可以通过成为角色成员来继承角色的权限。
1)权限分类
权限的种类分为两种:对象权限和用户权限。
①对象权限:对象权限指对已存在的数据库对象的操作权限,包括对数据库对象的一些操作许可权限,比如SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALTER、DROP、INDEX、REFERENCES、ALTER ROUTINE等
②用户权限:用户权限指MySQL中所有的数据库相关活动的权限。例如CREATE、CREATE USER、CREATE ROUTINE、CREATE VIEW、CREATE TABLESPACE、CREATE TEMPORARY TABLES、EVENT、FILE、PROCESS、RELOAD、SHOW DATABASES、USAGE、SUPER、SHUTDOWN、SHOW VIEW、TRIGGER、LOCK等。
2)权限授予语法格式
GRANT(https://www.daowen.com)
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_or_role [, user_or_role] ...
[WITH GRANT OPTION]
[AS user
[WITH ROLE
DEFAULT
| NONE
| ALL
| ALL EXCEPT role [, role ] ...
| role [, role ] ...
]
]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
priv_type:包括下面这些权限。
①All/All Privileges权限代表全局或者全数据库对象级别的所有权限。
②Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表、create和insert新表的权限。
③Alter routine权限代表允许修改或者删除存储过程、函数的权限。
④Create权限代表允许创建新的数据库和表的权限。
⑤Create routine权限代表允许创建存储过程、函数的权限。
⑥Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限。
⑦Create temporary tables权限代表允许创建临时表的权限。
⑧Create user权限代表允许创建、修改、删除、重命名user的权限。
⑨Create view权限代表允许创建视图的权限。
⑩Delete权限代表允许删除行数据的权限。
⑪Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令。
⑫Event权限代表允许查询、创建、修改、删除MySQL事件。
⑬Execute权限代表允许执行存储过程和函数的权限。
⑭File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select ... into outfile,load file()函数。
⑮Grant option权限代表是否允许此用户授权或者收回给其他用户给予的权限。
⑯Index权限代表是否允许创建和删除索引。
⑰Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限。
⑱Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写。
⑲Process权限代表允许查看MySQL中的进程信息,比如执行show processlist、 mysqladmin processlist、show engine等命令。
Reference权限代表是否允许创建外键。
Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表。
Replication client权限代表允许执行show master status,show slave status,show binary logs命令。
Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系。
Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1,Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的。
Show databases权限代表通过执行show databases命令查看所有的数据库名。
Show view权限代表通过执行show create view命令查看视图创建的语句。
Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown。
Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令。
Trigger权限代表允许创建、删除、执行、显示触发器的权限。
Update权限代表允许修改表中的数据的权限。
Usage权限是创建一个用户之后的默认权限,其本身代表链接登录权限。
3)权限回收语法格式
REVOKE [IF EXISTS]
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user_or_role [, user_or_role] ...
[IGNORE UNKNOWN USER]
REVOKE [IF EXISTS] ALL [PRIVILEGES], GRANT OPTION
FROM user_or_role [, user_or_role] ...
[IGNORE UNKNOWN USER]