用户账号管理
创建账号
CREATE USER username@hostname
[
IDENTIFIED BY [PASSWORD] 'password'
]
主机也可以使用通配符:testuser@'192.168.100.1_ _'
表示可以使用100.100-100.199
CREATE USER 'testuser'@'192.168.%.%' IDENTIFIED BY 'testpass';
查看用户能够使用的权限
SHOW GRANTS FOR 'testuser'@'192.168.%.%';
重命名账号
RENAME USER old_user TO new_user
[, old_user TO new_user] ...
RENAME USER 'testuser'@'192.168.%.%' TO 'myuser'@'192.168.130.%';
重置密码
SET PASSWORD [FOR user] = PASSWORD('auth_string')
SET PASSWORD FOR 'myuser'@'192.168.130.%' = PASSWORD('mypass');
删除账号
DROP USER 'myuser'@'192.168.130.%';
权限管理:
GRANT(授予权限)
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
priv_type
管理类权限
create temporary tables 创建临时表
create user 创建用户
file 允许用户读或者写某些文件
lock tables 添加显式锁
process 查看用户的线程
reload 相当于执行flush和reset
replication client 查询有哪些复制客户端
replication slave 赋予用户复制权限
show databases
shutdown
super
数据库访问权限
alter 修改表
alter routine 存储历程
create 创建库和表
create routine 存储过程,存储函数
create view 创建视图
delete 删除表行
drop 删除库和表
execute 执行存储过程,存储函数
grant option 将自己的权限复制给别的用户
index 创建删除索引
INSERT 插入数据
SELECT 查询数据
show view 查看视图如何被创建
update 更新数据
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
user_specification:
user
[
IDENTIFIED BY [PASSWORD] 'password'
| IDENTIFIED WITH auth_plugin [AS 'auth_string']
]
ssl_option:
SSL
with_option:
GRANT OPTION 转赠给别人
| MAX_QUERIES_PER_HOUR count 每小时允许执行的最大查询次数
| MAX_UPDATES_PER_HOUR count 每小时允许执行的最大更新次数
| MAX_CONNECTIONS_PER_HOUR count 每小时允许执行的最大连接次数
| MAX_USER_CONNECTIONS count 使用同一个账号可以同时连接的次数
要想创建库应该对所有表都有权限
REVOKE(收回授权)
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
REVOKE PROXY ON user
FROM user [, user] ...
REVOKE CREATE ON testdb.tb1 FROM 'tuser'@'192.168.%.%';
几个跟用户授权相关的表:
db:库级别的权限
host:主机级别权限,已废弃
tables_priv:表级别权限
colomns_priv:列级别的权限
procs_priv:存储过程和存储函数相关的权限
proxies_priv:代理用户权限·
练习:
1、授权testuser能够通过192.168.0.0/16网络内的任意主机访问当前mysql服务器的权限
GRANT ALTER ON *.* TO 'testuser'@'192.168.%.%' IDENTIFIED BY 'testpass';
2、让此用户能够创建和删除testdb数据库,及库中的表
GRANT CREATE,DROP ON testdb.* to 'testuser'@'192.168.%.%';
3、让此用户能够在testdb库中的t1表中执行查询、删除、更新和插入操作
GRANT SELECT,UPDATE,INSERT,DELETE ON testdb.t1 TO 'testuser'@'192.168.%.%';
4、让此用户能够在testdb库上创建和删除索引
GRANT INDEX ON testdb.* TO 'testuser'@'192.168.%.%';
5、让此用户能够在testdb.t2表上查询id和name字段,并允许其将此权限传授予其他用户
GRANT SELECT(id,name) ON testdb.t2 TO 'testuser'@'192.168.%.%';
GRANT GRANT OPTION ON testdb.t2 TO 'testuser'@'192.168.%.%';