一).用户创建
通过create user语句创建用户
在执行CREATE USER或CRANT语句后,MySQL服务器会修改相应的用户权限表,添加或修改用户及权限。
create user ‘aaa’@‘HOST’ identified by ‘123’;
HOST的形式:1. IP地址,如1.1.1.1;2. 主机名,如localhost;3. 网络地址,如172.16.0.04. 通配符,如%:匹配任意字符_:匹配任意单个字符如1.1.1…_(允许1.1.1.1-1.1.1.9)
通过grant语句创建新用户
GRANT语句是添加新用户并授权它们访问MySQL对象的首选方法,其语法格式为:
grant all on DB_NAME.TABLE_NAME to ‘USERNAME’@‘HOST’ identified by ‘PASSWORD’;
HOST的表现形式和create user一样
- 创建root用户
mysql> GRANT ALL PRIVILEGES ON . TO ‘root’@‘localhost’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
mysql> flush privileges;
2). 创建一个基本的增删改查用户
mysql> GRANT UPDATE, DELETE, INSERT, SELECT ON . TO ‘test’@’%’ identified by ‘test’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
mysql> flush privileges;
# MAX_QUERIES_PER_HOUR,MAX_CONNECTIONS_PER_HOUR,MAX_UPDATES_PER_HOUR设置为0表示不限制
3). 创建数据库基本的增删改查用户
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON db_name
.* TO ‘test’@’%’ identified by ‘test’;
mysql> flush privileges;
4). 授予数据库名以db开头的数据库的权限
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON db%
.* TO ‘bbb’@’%’;
mysql> flush privileges;
5). 创建备份用户权限
mysql> GRANT SELECT,EVENT,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT ON . TO ‘backup’@‘localhost’ identified by ‘backup’;
mysql> flush privileges;
6). 备份恢复用户权限
mysql> GRANT INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON . TO ‘restore’@‘localhost’ identified by ‘123456’;
mysql> flush privileges;
7). 复制用户权限
mysql> GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘repl’@’%’ IDENTIFIED BY ‘123456’;
mysql> flush privileges;
2.用户删除
mysql> drop user ‘USERNAME’@‘HOST’;
# 删除MySQL默认的无用账户;
mysql> drop user ‘root’@‘localhost.localdomain’;
# 删除MySQL默认的无用账户;
mysql> drop user ‘root’@‘127.0.0.1’;
- 更改用户名
mysql> rename user OLD_NAME to NEW_NAME;
- 修改用户密码
通过mysqladmin工具
****# 给root@localhost用户登录mysql设置密码为"redhat";
$ mysqladmin -u root -h localhost password “redhat”
****# 修改root@localhost用户登录mysql数据库的密码;
$ mysqladmin -u root -h localhost password “new passwd” -p “old passwd”
通过直接修改mysql.user表的用户记录
# MySQL 5.6
mysql> update mysql.user set password=PASSWORD(‘redhat’) where user=‘root’;
mysql> flush privileges;
# MySQL 5.7
mysql> update mysql.user set authentication_string=PASSWORD(‘redhat’) where user=‘root’;
mysql> flush privileges;
set password语句
mysql> set password for ‘root’@‘localhost’=PASSWORD(‘redhat’);
mysql> flush privileges;
ALTER USER语句(MYSQL5.7版本)
mysql> use mysql
mysql> alter user root@‘localhost’ identified by ‘123456’;
mysql> flush privileges;
给root用户登录mysql设置密码为helloWORD并以加密方式
mysql> use mysql;
# MySQL5.6
mysql> update user set password=PASSWORD(‘helloWORD’) where user=‘root’;
# MySQL5.7
mysql> update mysql.user set authentication_string=PASSWORD(‘helloWORD’) where user=‘root’;
mysql> flush privileges;
二)MySQL用户权限表mysql.user,mysql,db,mysql.tables_priv,mysql.columns_priv,mysql.procs_priv
全局层级:全局权限适用于一个给定MySQL Server中的所有数据库,这些权限存储在mysql.user表中。
GRANT ALL ON . TO ‘user’@‘host’; # . 表示数据库库的所有库和表,对应权限存储在mysql.user表中
数据库层级:数据库权限适用于一个给定数据库中的所有目标,这些权限存储在mysql.db表中。
GRANT ALL ON mydb.* TO ‘user’@‘host’; #mydb.* 表示mysql数据库下的所有表,对应权限存储在mysql
表层级:表权限适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中。
GRANT ALL ON mydb.mytable TO ‘user’@‘host’; #mydb.mytable 表示mysql数据库下的mytable表,对应权
列层级:列权限使用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中。
GRANT ALL (col1, col2, col3) ON mydb.mytable TO ‘user’@‘host’; #mydb.mytable 表示mysql数据库下的mytab
子程序层级:CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。
GRANT EXECUTE ON PROCEDURE mydb.myproc TO ‘user’@‘host’; #mydb.mytable 表示mysql数据库下的mytable表