MySQL心得9--用户和数据安全(一)

2014-11-24 09:39:22 · 作者: · 浏览: 0
MySQL心得9--用户和数据安全
1. 添加用户
可以使用CREATE USER语法添加一个或多个用户,并设置相应的密码。 语法格式:
CREATE USER user [identified BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
www.2cto.com
其中,user的格式为: 'user_name'@ 'host name'
说明:
user_name为用户名,host_name为主机名,password为该用户的密码。在大多数SQL产品中,用户名和密码只由字母和数字组成。
使用自选的IDENTIFIED BY子句,可以为账户给定一个密码。特别是要在纯文本中指定密码,需忽略PASSWORD关键词。如果不想以明文发送密码,而且知道PASSWORD()函数返回给密码的混编值,则可以指定该混编值,但要加关键字PASSWORD。
CREATE USER用于创建新的MySQL账户。CREATE USER会在系统本身的mysql 数据库的user表中添加一个新记录。要使用CREATE USER,必须拥有my sql数据库的全局CREATE USER权限或INSERT权限。如果账户已经存在,则出现错误。
例: 添加两个新的用户,king的密码为queen,palo的密码为530415。
CREATE USER
'king'@'localhost'IDENTIFIED BY 'queen',
www.2cto.com
'palo'@'localhost'IDENTIFIED BY '530415';
说明:
在用户名的后面声明了关键字localhost。这个关键字指定了用户创建的使用MySQL的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如“_”,或通配符如“%”,则需要用单引号将其括起。“%”表示一组主机,所有人都可以访问。
如果两个用户具有相同的用户名但主机不同,MySQL将其视为不同的用户,允许为这两个用户分配不同的权限集合。
如果没有输入密码,那么MySQL允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。
刚刚创建的用户还没有很多权限。它们可以登录到MySQL,但是它们不能使用USE语句来让用户已经创建的任何数据库成为当前数据库,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,例如,用一条SHOW语句查询所有存储引擎和字符集的列表。
2. 删除用户
语法格式:DROP USER user [, user_name] ...
DROP USER语句用于删除一个或多个MySQL账户,并取消其权限。要使用DROPUSER,必须拥有 mysql数据库的全局CREATE USER权限或DELETE权限。
例: 删除用户TOM :DROP USER TOM@localhost;
如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继续保留,因为MySQL并没有记录是谁创建了这些对象。
3. 修改用户
可以使用rename USER语句来修改一个已经存在的SQL用户的名字。 语法格式:RENAME USER old_user TO new_user,
[, old_user TO new_user] ...
说明:
old_user为已经存在的SQL用户。new_user为新的SQL用户。
RENAME USER语句用于对原有MySQL账户进行重命名。要使用RENAME USER,必须拥有全局CREATE USER权限或mysql数据库UPDATE权限。如果旧账户不存在或者新账户已存在,则会出现错误。
例: 将用户king1和king2的名字分别修改为ken1和ken2。
RENAME USER
www.2cto.com
'king1'@'localhost' TO' ken1'@'localhost',
'king2'@'localhost' TO' ken2'@'localhost';
4. 修改密码
要修改某个用户的登录密码,可以使用SET PASSWORD语句。
语法格式:SET PASSWORD [FOR user]= PASSWORD('newpassword')
说明:
如果不加FOR user,表示修改当前用户的密码。加了FORuser则是修改当前主机上的特定用户的密码,user为用户名。user的值必须以'user_name'@'host_name'的格式给定。
例: 将用户king的密码修改为queen1。
SET PASSWORD FOR 'king'@'localhost' =PASSWORD('queen1');
5. 授予权限
新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权。可以授予的权限有以下几组。
(1)列权限:和表中的一个具体列相关。例如,使用UPDATE语句更新表XS学号列的值的权限。
(2)表权限:和一个具体表中的所有数据相关。例如,使用SELECT语句查询表XS的所有数据的权限。
(3)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的XSCJ数据库中创建新表的权限。
(4)用户权限:和MySQL所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。
给某用户授予权限可以使用grant语句。使用showgrants语句可以查看当前账户拥有什么权限。
GRANT语法格式: GRANT priv_type [(column_list)] [, priv_type[(column_list)]] ...
ON [object_type] {表名 | * | *.* | 库名.*}
TO user [IDENTIFIED BY [PASSWORD]'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option] ...]
其中,object_type:
TABLE
| FUNCTION
| PROCEDURE
with_option :
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR coun