MySQL心得9--用户和数据安全(二)
t
| MAX_USER_CONNECTIONS count
www.2cto.com
说明:priv_type为权限的名称,如SELECT、UPDATE等,给不同的对象授予权限priv_type的值也不相同。TO子句用来设定用户的密码。ON关键字后面给出的是要授予权限的数据库或表名,下面将一一介绍。
(1)授予表权限和列权限
授予表权限时,priv_type可以是以下值:
● SELECT:给予用户使用SELECT语句访问特定的表的权力。用户也可以在一个视图公式中包含表。然而,用户必须对视图公式中指定的每个表(或视图)都有SELECT权限。
● INSERT:给予用户使用INSERT语句向一个特定表中添加行权力.
● DELETE:给予用户使用DELETE语句向一个特定表中删除行权力。
● UPDATE:给予用户使用UPDATE语句修改特定表中值的权力。
● REFERENCES:给予用户创建一个外键来参照特定的表的权力。
● CREATE:给予用户使用特定的名字创建一个表的权力。
● ALTER:给予用户使用ALTERTABLE语句修改表的权力。
● INDEX:给予用户在表上定义索引的权力。
● DROP:给予用户删除表的权力。
● ALL或ALL PRIVILEGES:表示所有权限名。
在授予表权限时,ON关键字后面跟tb1_name,tb1_name为表名或视图名。
例: 授予用户king在XS表上的SELECT权限。
USE XSCJ;
GRANT SELECT ON XS TOking@use_name;
说明:
若在TO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,MySQL会自动执行一条CREATE USER语句来创建这个用户,但必须为该用户指定密码。
例:用户liu和zhang不存在,授予它们在XS表上的SELECT和UPDATE权限。
GRANT SELECT,UPDATE ON XS
TO liu@localhost IDENTIFIED BY 'LPWD',
zhang@localhostIDENTIFIED BY 'ZPWD';
对于列权限,priv_type的值只能取SELECT、INSERT和UPDATE。权限的后面需要加上列名column_list。
例: 授予king在XS表上的学号列和姓名列的UPDATE权限。
GRANT UPDATE(姓名, 学号) ON XS TO king@localhost;
(2)授予数据库权限 www.2cto.com
表权限适用于一个特定的表。MySQL还支持针对整个数据库的权限。例如,在一个特定的数据库中创建表和视图的权限。
授予数据库权限时,priv_type可以是以下值:
● SELECT:给予用户使用SELECT语句访问特定数据库中所有表和视图的权力。
● INSERT:给予用户使用INSERT语句向特定数据库中所有表添加行的权力。
● DELETE:给予用户使用DELETE语句删除特定数据库中所有表的行的权力。
● UPDATE:给予用户使用UPDATE语句更新特定数据库中所有表的值的权力。
● REFERENCES:给予用户创建指向特定的数据库中的表外键的权力。
● CREATE:给予用户使用CREATETABLE语句在特定数据库中创建新表的权力。
● ALTER:给予用户使用ALTERTABLE语句修改特定数据库中所有表的权力。
● INDEX:给予用户在特定数据库中的所有表上定义和删除索引的权力。
● DROP:给予用户删除特定数据库中所有表和视图的权力。
● CREATE TEMPORARY TABLES:给予用户在特定数据库中创建临时表的权力。
● CREATE VIEW:给予用户在特定数据库中创建新的视图的权力。
● SHOW VIEW:给予用户查看特定数据库中已有视图的视图定义的权力。
● CREATE ROUTINE:给予用户为特定的数据库创建存储过程和存储函数等权力。
● ALTER ROUTINE:给予用户更新和删除数据库中已有的存储过程和存储函数等权力。
● EXECUTE ROUTINE:给予用户调用特定数据库的存储过程和存储函数的权力。
● LOCK TABLES:给予用户锁定特定数据库的已有表的权力。
● ALL或ALL PRIVILEGES:表示以上所有权限名。
在GRANT语法格式中,授予数据库权限时ON关键字后面跟“*”和“db_name.*”。“*”表示当前数据库中的所有表;“db_name.*”表示某个数据库中的所有表;*.*表示所有库下所有表。
例: 授予king在XSCJ数据库中的所有表的SELECT权限。
GRANT SELECT ON XSCJ.* TO king@localhost;
说明:这个权限适用于所有已有的表,以及此后添加到XSCJ数据库中的任何表。
例: 授予king在XSCJ数据库中所有的数据库权限。
USE XSCJ; www.2cto.com
GRANT ALL ON * TO king@localhost;
和表权限类似,授予一个数据库权限也不意味着拥有另一个权限。如果用户被授予可以创建新表和视图,但是还不能访问它们。要访问它们,它还需要单独被授予SELECT权限或更多权限。
(3)授予用户权限
最有效率的权限就是用户权限,对于需要授予数据库权限的所有语句,也可以定义在用户权限上。例如,在用户级别上授予某人CREATE权限,这个用户可以创建一个新的数据库,也可以在所有的数据库(而不是特定的数据库)中创建新表。
MySQL授予用户权限时priv_type还可以是以下值。
● CREATE USER:给予用户创建和删除新用户的权力。
● SHOW DATABASES:给予用户使用SHOW DATABASES语句查看所有已有的数据库的定义的权利。
在GRANT语法格式中,授予用户权限时ON子句中使用“*.*”,表示所有数据库的所有表。
例: 授予Peter对所有数据库中的所有表的CREATE、ALTERT和DROP权限。
GRANT CREATE ,ALTER,DROP
ON *.* TO Peter@localhost IDENTIFIED BY 'ppwd';
例: 授予Peter创建新用户的权力。