如何创建MySQL用户并授予权限

时间:2019-11-20 08:53:47  来源:igfitidea点击:

如何创建MySQL用户帐户并授予权限?

安装mysql客户端

根据Linux发行版安装mysql客户端。

Debian/Ubuntu Linux上安装mysql客户端

$ sudo apt install mysql-client

CentOS/RHEL上安装mysql客户端

$ sudo yum install mysql

Fedora Linux上安装mysql客户端

$ sudo dnf install mysql

如何连接mysql服务器:

使用mysql命令

$ mysql -u {USER_NAME} -h {MySQL-SERVER-IP} -P {MYSQL_PORT} -p

例如:

$ mysql -u root -h 192.168.1.100 -P 3306 -p

如何创建MySQL用户帐户并授予权限

这里,我将以root用户身份登录:

$ mysql -u root -h 192.168.1.100 -P 3306 -p

创建一个新的数据库

如果没有数据库,创建一个新MySQL数据库:

mysql> CREATE DATABASE theitroad_blog;
Query OK, 1 row affected (0.00 sec)

创建一个新的MySQL用户帐户

为数据库theitroad_blog创建一个用户

mysql> CREATE USER 'Hyman'@'%' IDENTIFIED BY 'password123';
Query OK, 0 rows affected (0.01 sec)

或者强制使用SSL连接:

mysql> CREATE USER 'tom'@'%' IDENTIFIED BY 'password123' REQUIRE SSL;
Query OK, 0 rows affected (0.01 sec)

%表示tom使用任何客户端/服务器IP都可以连接MySQL服务器。

我们可以限制只能某个IP或者子网访问,增加安全性。

## EC2/Lightsail server IP address/client ##
mysql> CREATE USER 'Hyman'@'172.26.9.11' IDENTIFIED BY 'password';
## VPC sub/net client example for 172.26.0.0/20 ##
mysql> CREATE USER 'Hyman'@'172.26.0.0/255.255.240.0' IDENTIFIED BY 'passwd';

如果要强制现有的MySQL用户帐户使用SSL连接,使用ALTER语句修改:

mysql> ALTER USER 'user_name'@'client_ip' REQUIRE SSL;
mysql> ALTER USER 'Hyman'@'%' REQUIRE SSL;

查看用户当前的权限:

mysql> SHOW GRANTS for userName;
mysql> SHOW GRANTS for Hyman;

授予MySQL用户帐户权限

权限可以分为几类:

  • 数据使用权限包括:SELECT,INSERT,UPDATE,DELETE和FILE
  • 结构特权包括:CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT和TRIGGER
  • 管理特权包括:GRANT, SUPER, PROCESS, RELOAD, SHUTDOWN, SHOW DATABASES, LOCK TABLES, REFERENCES, REPLICATION CLIENT, REPLICATION SLAVE 和 CREATE USER
  • SSL特权包括:EQUIRE NONE, REQUIRE SSL, REQUIRE X509
  • ALL PRIVILEGES:授予mysql用户帐户所有特权

授予用户不同权限的语法如下:

GRANT permission ON DB_NAME.TABLE_NAME TO 'userNameHere'@'client_ip';
GRANT permission1,permission2 ON DB.TABLE TO 'userNameHere'@'client_vpc_sub_net';

例如:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'Hyman'@'%';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'Hyman'@'172.26.0.0/255.255.240.0';

授予各种结构特权:

mysql> GRANT CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `blog`.* TO 'Hyman'@'%';

授予所有特权:

mysql> GRANT ALL PRIVILEGES ON `blog`.* TO 'Hyman'@'%';

刷新权限:

mysql> FLUSH PRIVILEGES;

如何撤销MySQL用户帐户的权限

REVOKE SQL语句用于撤消/回收MySQL用户的权限。

语法为:

mysql> REVOKE ALL PRIVILEGE1,PRIVILEGE2 ON database.* FROM 'user'@'client_ip';
mysql> REVOKE ALL PRIVILEGES ON database.* FROM 'user'@'vpc_sub_net';
mysql> REVOKE INSERT, DELETE ON blog.* FROM 'sai'@'%';
mysql> REVOKE ALL PRIVILEGES ON blog.* FROM 'sai'@'%';