12-用户管理
数据库安全性
- 数据库安全性的概念
数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄露、更改或破坏。
数据库的一大特点是数据可以共享。但是,数据库系统中的数据共享不能是无条件的共享。数据库中数据的共享应该是在数据库管理系统统一的严格控制之下的共享,即只允许合法用户访问其权限范围内的数据。
数据库系统的安全性是衡量数据库系统的主要性能指标之一。
影响数据库安全性的因素主要有:非授权用户对数据库的恶意存取和破坏、数据库中重要或敏感的数据被泄露、安全环境的脆弱性等。
- 数据库安全性与计算机系统安全性的关系
计算机系统安全性是指为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据,防止因偶然或恶意的原因使计算机系统遭到破坏,数据遭到更改或泄露等。
安全性问题不是数据库系统独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
数据库安全性是计算机系统的安全性的一个部分,数据库系统不仅要利用计算机系统的安全性措施保证自己的安全性,同时还需要专门的手段和方法,使安全性能更好。
- 数据安全性与数据完整性的关系
数据的完整性是指为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾数据的进出所造成的无效操作和错误结果。
数据的安全性是保护数据库防止恶意的破坏和非法的存取。
数据库安全性措施的防范对象是非法用户和非法操作;数据库完整性措施的防范对象是不合语义的数据。
- 实现数据库安全性的常用技术
用户标识和鉴别
存取控制
视图机制
审计
数据加密
创建用户
使用CREATE USER语句创建新用户时,必须拥有CREATE USER权限。语法:
CREATE USER <用户名@主机名>
[IDENTIFIED BY [WITH PASSWORD] '密码']
说明:
“用户名”参数是指用来连接数据库服务器使用的用户名。
“主机名”参数是指允许用来连接数据库服务器的客户端地址,可以是IP地址,也可以是客户机名称,通常有以下三种情况:
- localhost:表示通过本地MySQL服务器主机访问数据库。
- 一个网段的IP(例如,192.168.18.%):表示允许客户端以192.168.18网段的IP地址进行访问。
- %:表示任何主机,即,不对客户端的主机做任何限制。
IDENTIFIED BY关键字是用来设置用户的密码。
示例:以root用户登录到MySQL控制台,使用CREATE USER语句创建一个新用户“test2”,密码为“12345678”,主机名为“localhost”。
修改用户密码
使用ALTER USER语句修改用户时,必须拥有ALTER USER权限。ALTER USER语句的语法格式如下:
ALTER USER <用户名@主机名>
[IDENTIFIED BY [WITH PASSWORD] '密码']
示例:以root用户登录到MySQL控制台,把test2用户的密码更改为“87654321”。
删除用户
使用DROP USER语句删除用户时,必须拥有DROP USER权限。DROP USER语句的语法格式如下:
DROP USER <用户名@主机名> [, ……];
示例:以root用户登录到MySQL控制台,删除test2用户。
权限管理
新创建的用户仅有少数权力,比如可以登录MySQL服务器,但不具备访问数据的实质权力,还需要给用户指定权限才能使用户具有访问数据库数据资源的权力。
权限列表
授予用户权限
授予用户权限使用GRANT语句,其语法格式如下:
GRANT <权限> [(列名列表)] ON <数据库.数据表>TO <用户名@主机名>[WITH with_option [with option] ……]
说明:
权限”参数表示权限的类型。可以是select、delete、update、insert、create、drop、alter等任意的一种或几种;如果是全部权限,可以使用all privileges,简写为all。
“列名列表”参数表示权限作用于哪些列上(多个列用逗号隔开),没有该参数时则表示作用于整个表上。
如果是对所有数据库的数据表的权限,“数据库.数据表”则使用“.”。
示例1:以root用户登录到MySQL控制台,使用GRANT语句授予test2用户对所有数据库的数据表具有查询、插入、修改、删除权限,要求加上WITH GRANT OPTION子句。
示例2:以test2用户登录到MySQL控制台,使用GRANT语句授予test1用户对stuinfo数据库中的课程表(course)具有查询、插入、修改、删除权限。
撤销用户权限
撤销用户权限使用REVOKE语句,其语法格式如下:
REVOKE <权限> [(列名列表)] ON <数据库.数据表>
FROM <用户名@主机名>
示例:以root用户登录到MySQL控制台,使用REVOKE语句撤销test1用户对stuinfo数据库中的课程表(course)所具有的查询、插入、修改、删除权限。
查看用户权限
查看用户权限使用SHOW GRANTS语句,其语法格式如下:
SHOW GRANTS FOR <用户名@主机名>
示例:以root用户登录到MySQL控制台,使用SHOW GRANTS语句查看test2用户的权限。
练习
1)创建一个名为login1的用户,初始密码为123456。
CREATE USER 'login1'@'localhost' IDENTIFIED BY '123456';
2)创建一个名为login2的用户,无初始密码。
CREATE USER 'login2'@'localhost';
3)使用root用户登录,将login2用户的密码修改为abcabc。
ALTER USER 'login2'@'localhost' IDENTIFIED BY 'abcabc';
4)使用root用户登录,授予login1用户对sales数据库中的所有数据表拥有查询、插入、修改和删除权限,要求加上WITH GRANT OPTION子句。
GRANT SELECT, INSERT, UPDATE, DELETE ON sales.*
TO 'login1'@'localhost'
WITH GRANT OPTION;
5)使用login1用户登录,授予login2用户对sales数据库中的商品表(product)拥有查询、插入、修改和删除权限。
GRANT SELECT, INSERT, UPDATE, DELETE ON sales.product
TO 'login2'@'localhost';
6)使用root用户登录,撤销login2用户对sales数据库中的商品表(product)所拥有的插入、修改和删除权限。
REVOKE INSERT, UPDATE, DELETE ON sales.product
FROM 'login2'@'localhost';
7)查看login2用户的权限。
SHOW GRANTS FOR 'login2'@'localhost';
8)使用root用户登录,撤销login1用户的所有权限。
REVOKE ALL ON sales.*
FROM 'login1'@'localhost';
9)删除login1、login2用户。
DROP USER 'login1'@'localhost','login2'@'localhost';