用户账户管理
利用select语句查看mysql数据库的使用者帐号
select user from mysql.user;
1)创建用户帐号
语法格式:
create user <用户名> 【identified by [password] 口令 】
<用户名>:指定创建用户帐号,其格式为‘user -name"@"host name’。这里‘user -name’是用户名,‘host name’为主机名,即用户连接mysql时所在主机的名字。如果在创建的过程中,只给出了账户中的用户名,而没有指定主机名,则主机名会默认为是‘%’,表示一族主机
可选项password:用于指定散列口令,即若使用明文设置口令时,需忽略password关键字;如果不想以明文设置口令,且知道password()函数返回给密码的散列值,则可以在口令设置语句中指定此散列值,但需要加上关键字password
identified by子句:用于指定用户账户对应的口令,若该用户账户无口令,则可省略此子句。
<口令>:指定用户帐号的口令,在identified by 关键字或password关键字之后。给定的口令值可以是只由字母和数字组成的明文,也可以是通过password函数得到的散列值。
create user 'zhangsan'@'localhost' identified by '123'
select password('123') #执行结果 *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
create user 'zhangsan'@'localhost' identified by password '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'
注意:
如果create user语句的使用中,没有为用户指定口令,那么mysql允许该用户可以不使用口令登录系统,然而从安全的角度而言,不推荐这种做法
使用create user语句创建一个用户帐号后,会在系统自身的mysql数据库的user表中添加一条新记录。如果创建的账户已经存在,则语句执行会出现错误。
新创建的用户拥有的权限很少,它们可以登录到mysql,只允许进行不需要权限的操作,如使用show语句查询所有存储引擎和字符集的列表等。
如果两个用户具有相同的用户名和不同的主机名,mysql会将它们视为不同的用户,并允许为这两个用户分配不同的权限集合。
删除用户
语法格式:
drop user<用户名 >,【用户名1】......
注意:
drop user 语句可用于删除一个或多个mysql账户,并撤销其原有权限
使用drop user语句,必须拥有mysql中的mysql数据库的delete权限或全部create user权限
在drop user语句的使用中,如果没有明确地给出账户的主机名,则该主机名会默认为是%
drop user zhangsan@localhost
修改用户帐号
语法格式:
rename user <旧用户> to <新用户>
rename user 'liming'@'localhost' to 'wanghong'@'localhost'
注意:
rename user语句用于对原有mysql账户进行重命名
如果系统中旧帐号不存在或新账户已存在,则语句执行会出现错误
要使用rename user语句,必须拥有mysql中的mysql数据库的update 权限或全局createa user权限
修改用户口令
语法格式:
set password [for <用户名>] = password('新口令') | OLD_password('旧明文口令') | '加密口令值'
set password for 'zhangsan'@'localhost'=passwore('456');
for子句:可选项,指定要修改口令的用户
password:表示使用函数password设置新口令,即新口令必须传递到函数password中进行加密
加密口令值:表示已被函数password加密的口令值
select password('hello') #查看hello的散列值
账户权限管理
查看权限语法:
show grants for 'wanghong'@'localhost'
权限的授予
语法:
grant <权限类型> [(<列名>)] [,<权限类型>[(<列名>)]] on <对象> <权限级别> to <用户> 其中<用户>的格式 <用户名> [identified by [passowrd] <口令>] [with grant option] |max_queries_per_hour <次数> |max_updates_per_hour <次数> |max_connections_per_hour <次数> |max_user_connections <次数>
grant select(student_id,student_name) on db_school.tb_student to 'wanghong'@'localhost'
grant select,update on db_school.tb_student to 'wanghong'@'localhost' identified by '123' 'huang'@'localhost' identifity by '789'
grant all on mytest.* to 'wanghong'@'localhost'
权限转移与限制
(1)转移权限
如果在with子句指定为with grant option,则表示to子句中所指定的所有用户都具有自己所拥有的权限授予其他用户的权利,而不论其他用户是否拥有该权限
grant select,update on mytest.student to 'wang'@'localhost' identified by '123' with grant option
(2)限制权限
在with子句中的with关键字后面紧跟的是max_queries_per_hour等,表示限制
grant select on mytest.student to 'wang'@'localhost' with max_queries_per_hour
权限的撤销
可以使用revoke语句撤销一个用户的权限,此用户不会被删除
语法:
revoke <权限类型> [(<列名>)] [,<权限类型>[(<列名>)]].... on <对象> <权限名> from <用户1>..... revoke all privileges ,grant option from user <用户>....
revoke select on mytest.students from 'xiaoming'@'localhost'