信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时,为了保证数据的安全性和可靠性,提出通过设置角色和权限实现对数据的安全访问,然后通过编写代码进行实验,以验证此方式解决数据库中数据安全问题的有效性。
目录
1 存放用户账户的权限表
2 账户和账户权限设计
2.1 从 Windows 命令行登录到 MySQL 数据库中
2.2 创建用户并赋予权限
在当今大数据时代,各行各业都离不开计算机信息技术,特别是利用信息系统应用软件对业务进行处理,系统后台会存放大量数据,这也使得数据变得越来越重要,而作为数据的主要存储器之一的数据库管理系统就承担起了保护数据的重要角色。在开发信息系统过程中,对数据库中数据的安全设计必须给予重视,才能提高数据的安全性。
目前主流的数据库管理系统有 Oracle、SQL Server、MySQL等,任何一个数据库都要考虑数据安全方面的设计,此文以 MySQL 数据库管理系统为例对数据安全进行论述,其中一类安全问题是指数据库中敏感数据被多个合法用户查询获取,在使用过程中发生泄密事故或恶意篡改,数据库管理员需要追踪和熟悉哪些用户曾访问数据以及这些用户的访问权限和操作,用于解决相关事故责任。
对数据库中存放的关键数据,基本上都有保密要求,即限制部分用户对数据的访问,在访问的过程中也会限制用户的访问权限,不同用户根据角色的不同,管理员要设置不同的访问权限,以保证数据库中数据的安全。
1 存放用户账户的权限表
为了方便管理员管理用户,需要为众多用户设置账户和访问权限,同时为了方便管理,数据库管理系统设置了重要的表存放账户和权限,在 MySQL 数据库中与用户及权限相关的表主要有 4 个,即 user 表、db 表、tables_priv 表和columns_priv 表。
user 表是最重要的表,包含用户、权限、安全和资源控制 4 类共计 42 个字段,用户包含用户名、主机名和密码。权限共计 29 个,以 _priv 结尾,例如 update_priv 等。针对user 表,里面存放全局级的权限。
db 表是非常重要的表之一,存放为用户指定的某个或某些数据库的操作权限。仅存放用户名、主机名及权限。针对 db 表,里面存放数据库级的权限。
tables_priv 表,用于存放固定数据库下的一个表和多个表的用户和用户权限信息。
columns_priv表,用于存放固定数据库下固定表的一列或多列的用户和用户权限信息。
4 个表均存放用户和权限,具体区别见如表 1 所示。
2 账户和账户权限设计
在 MySQL 数据库管理系统下,账户的创建和验证与其他数据库管理系统有所不同,在单机系统中,为了能够进行验证,数据库设计时,需要在 Windows 命令行下登录才能够进行验证。
2.1 从 Windows 命令行登录到 MySQL 数据库中
登录过程如下:开始—运行—输入cmd,进入Windows命令行 -- 输入参数,即登录命令(MySQL–u 用户名 –h 主机名 –p 密码),第一次登录创建用户账户需要超级管理员root 用户进行登录。
注意事项:登录命令如果执行,必须切换到 MySQL 的安装文件 bin 目录下,因为很多用户在安装 MySQL 时,并没有配置 path 变量,此时,Windows 命令行无法识别命名,所以无法执行。例如C:\Users\Administrator>mysql -u root -hlocalhost–p,错误提示:“mysql”不是内部或外部命令,也不是可运行的程序或批处理文件。
另外,如果 MySQL 服务器未开启,也会显示命令无效,所以也必须保证数据库服务器处于开启的状态。下面是以超级管理员进入 MySQL 数据库管理系统,在第一次创建用户的时候,仅有 root 超级管理员才有权限创建其他用户,输入密码便可以登录到 MySQL 数据库命令行。登录过程如图 1所示。
输入密码,即可进入 MySQL 命令行。代码为:
c:\wamp\bin\mysql\mysql5.5.24\bin>mysql -u root -hlocalhost -p
Enter password:-- 此处输入密码,后面出现 MySQL 的欢迎界面和连接所花费的时间等。
mysql>-- 最终以此命令符出现,此时光标会在 mysql>后面停留,等待输入命令。
2.2 创建用户并赋予权限
在 MySQL 数据库管理系统下,在此建立一个数据库 b和数据库a,在数据库b下建立一个数据表book,并在book数据表中设计一个整型字段 bid 代表图书编号,可以输入一条记录为 1,为了进行验证,再建立一个 book2 数据表,字段和记录可以随意设计,在此利用简单的数据表展示创建用
户账户并赋予权限的过程。部分代码为:
Create database a;
Create database b;
create table book(bidint);
insert into book values(1);
create table book2(bidint,bname char(4));
下面设计第一个用户 a1,密码为:test1,此用户的权限设计为仅能操作数据库 b,利用如下格式设计代码,即利用 grant 创建新用户,并赋予权限,语法规则:Grant 权限类型 on 数据库 . 数据表 to 用户名 @ 主机名 identifiedby password[,user@host identified by password][with grantoption]。注意:权限类型表示赋予用户的权限类型(例如:select、alter、reload、excute、event 等),数据库 . 数据表代表权限的级别,一个 * 代表当前数据库中的所有表,*.*代表所有数据库下的所有表,db_name.* 代表固定数据库中的所有表,db_name.tbl_name代表固定数据库中的固定表和视图,db_name.routine_name代表固定数据库中的固定存储过程和函数,user@host 代表用户名和主机名,password 代表密码,而[with grant option] ]则代表该用户可以对其他用户赋予权限,其他命令为固定写法。此代码为:
grant all on b.* to'a1'@'localhost'identified by'test1';
具体代码即执行过程如图 2 所示。
下面设计第二个用户 a2,密码为:test2,设计权限为仅能查看数据库 b 下的 book 表,此代码为:
grant select on b.book to'a2'@'localhost'identified by'test2';
具体代码即执行过程如图 3 所示。