MySQL—用户和权限管控
关注微信公众号:CodingTechWork,一起学习进步。
用户
创建用户
语法
CREATE USER 'user'[@'host']
[IDENTIFIED BY [PASSWORD] 'password ']
[, ...]
其中:
- CREATE USER:用于在mysql服务器上创建新用户账号,用户使用引号标示,后面跟
@
符号和用引号标示的主机IP地址或者主机名(本机使用localhost或者127.0.0.1作为主机),使用通配符%
,则表示作为主机允许客户端指定用户从任意主机上进行连接; - IDENTIFIED BY:子句后面跟密码,用引号标示纯文本,无需使用
PASSWORD()
函数进行加密(加密工作自动完成),若未指定password子句,则默认为空密码,需要使用SET PASSWORD
进行密码设置。 ,
:可以使用逗号分隔列表指定多个用户账号。
示例
mysql> CREATE USER 'userA'@'localhost'-> IDENTIFIED BY '1QAZ!qaz',-> 'userA'@'linux01'-> IDENTIFIED BY '2WSX#edc';
Query OK, 0 rows affected (0.48 sec)
删除用户
语法
DROP USER 'user'@'host'
其中
- user:为用户名
- host:为主机名或IP
示例
mysql> DROP USER 'userA'@'linux01';
Query OK, 0 rows affected (0.00 sec)mysql> SELECT host, user, password_last_changed FROM mysql.user WHERE user = 'userA';
+-----------+-------+-----------------------+
| host | user | password_last_changed |
+-----------+-------+-----------------------+
| localhost | userA | 2021-05-05 14:49:37 |
+-----------+-------+-----------------------+
1 row in set (0.00 sec)
修改用户
语法
RENAME USER 'old_user'[@'old_host']
TO 'new_user'[@'new_host'] [, ...];
其中
- old_user和old_host:为更改前的用户和主机ip或地址;
- new_user和new_host:为需更改后的用户和主机ip或地址;
- 逗号:多个账户一起更改时,使用逗号进行列表分割。
示例
mysql> RENAME USER 'userA'@'localhost' -> TO 'userD'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> SELECT host, user, password_last_changed FROM mysql.user WHERE user = 'userA';
+------+-------+-----------------------+
| host | user | password_last_changed |
+------+-------+-----------------------+
| % | userA | 2021-05-05 16:07:26 |
+------+-------+-----------------------+
1 row in set (0.00 sec)mysql> SELECT host, user, password_last_changed FROM mysql.user WHERE user = 'userD';
+-----------+-------+-----------------------+
| host | user | password_last_changed |
+-----------+-------+-----------------------+
| localhost | userD | 2021-05-05 15:35:18 |
+-----------+-------+-----------------------+
1 row in set (0.00 sec)
查看用户
语法
SELECT User, Host, ...,
FROM mysql.user
WHERE user = 'xxx';
其中
- user:为用户名
- mysql.user:数据库中的用户一般都在mysql.user表中可以查询到。
示例
mysql> SELECT host, user, password_last_changed FROM mysql.user WHERE user = 'userA';
+-----------+-------+-----------------------+
| host | user | password_last_changed |
+-----------+-------+-----------------------+
| localhost | userA | 2021-05-05 14:49:37 |
| linux01 | userA | 2021-05-05 14:49:37 |
+-----------+-------+-----------------------+
2 rows in set (0.00 sec)
创建了带有密码的两个账户,是同一个人,但是一个账号是允许用户登录到服务器宿主数据库,在mysql客户机或在服务器上的一些其他客户端localhost中运行;另一个账户允许用户使用客户端连接一个名为linux01
的主机。
设置密码
语法
SET PASSWORD [FOR 'user'@'host'] = PASSWORD('password')
- 若未指定FOR子句,则
默认为当前用户账户
,需慎重。 - PASSWORD()将会对给定密码进行加密。
示例
SET PASSWORD FOR 'userA'@'%' = PASSWORD('3EDC#edc');
Query OK, 0 rows affected, 1 warning (0.00 sec)
权限控制
查看系统权限
语法
SHOW PRIVILEGES
示例
mysql> SHOW PRIVILEGES;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege | Context | Comment |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter | Tables | To alter the table |
| Alter routine | Functions,Procedures | To alter or drop stored functions/procedures |
| Create | Databases,Tables,Indexes | To create new databases and tables |
| Create routine | Databases | To use CREATE FUNCTION/PROCEDURE |
| Create temporary tables | Databases | To use CREATE TEMPORARY TABLE |
| Create view | Tables | To create new views |
| Create user | Server Admin | To create new users |
| Delete | Tables | To delete existing rows |
| Drop | Databases,Tables | To drop databases, tables, and views |
| Event | Server Admin | To create, alter, drop and execute events |
| Execute | Functions,Procedures | To execute stored routines |
| File | File access on server | To read and write files on the server |
| Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess |
| Index | Tables | To create or drop indexes |
| Insert | Tables | To insert data into tables |
| Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) |
| Process | Server Admin | To view the plain text of currently executing queries |
| Proxy | Server Admin | To make proxy user possible |
| References | Databases,Tables | To have references on tables |
| Reload | Server Admin | To reload or refresh tables, logs and privileges |
| Replication client | Server Admin | To ask where the slave or master servers are |
| Replication slave | Server Admin | To read binary log events from the master |
| Select | Tables | To retrieve rows from table |
| Show databases | Server Admin | To see all databases with SHOW DATABASES |
| Show view | Tables | To see views with SHOW CREATE VIEW |
| Shutdown | Server Admin | To shut down the server |
| Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. |
| Trigger | Tables | To use triggers |
| Create tablespace | Server Admin | To create/alter/drop tablespaces |
| Update | Tables | To update existing rows |
| Usage | Server Admin | No privileges - allow connect only |
+-------------------------+---------------------------------------+-------------------------------------------------------+
31 rows in set (0.00 sec)
查看用户权限
语法
SHOW GRANTS FOR 'user'@'host';
其中
- user:为用户名
- host:为主机名或IP
示例
mysql> SHOW GRANTS FOR 'userA'@'localhost';
+-------------------------------------------+
| Grants for userA@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'userA'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)mysql> SHOW GRANTS FOR 'userB'@'localhost' \G
*************************** 1. row ***************************
Grants for userB@localhost: GRANT USAGE ON *.* TO 'userB'@'localhost'
*************************** 2. row ***************************
Grants for userB@localhost: GRANT SELECT ON `db01`.* TO 'userB'@'localhost'
*************************** 3. row ***************************
Grants for userB@localhost: GRANT SELECT, INSERT, UPDATE ON `db123`.`tab02` TO 'userB'@'localhost'
3 rows in set (0.00 sec)
赋予所有权限
语法
GRANT ALL PRIVILEGES
ON *.* TO 'user'@'host'
IDENTIFIED BY 'password'
WITH GRANT OPTION;
其中
- user:为用户名
- host:为主机名或IP
- password:为用户名密码
- ALL:为用户赋予所有基本权限
- WITH GRANT OPTION:使用户具备GRANT权限
示例
mysql> GRANT ALL PRIVILEGES ON *.* -> TO 'userA'@'localhost'-> IDENTIFIED BY '1QAZ!qaz'-> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> SHOW GRANTS FOR 'userA'@'localhost';
+----------------------------------------------------------------------+
| Grants for userA@localhost |
+----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'userA'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)
赋予指定权限
语法
GRANT SELECT, INSERT, UPDATE... ON db_name.tab_name
TO 'user'@'host'
IDENTIFIED BY 'password';
其中
- db_name: 数据库名
- tab_name:表名
- user:用户名
- host:主机名或IP
- password:用户名密码
mysql> CREATE USER 'userB'@'localhost' -> IDENTIFIED BY '1QAZ!qaz'-> ;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW GRANTS FOR 'userB'@'localhost';
+-------------------------------------------+
| Grants for userB@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'userB'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)mysql> GRANT SELECT ON db01.* -> TO 'userB'@'localhost' -> IDENTIFIED BY '1QAZ!qaz';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> GRANT SELECT, INSERT, UPDATE ON db123.tab02-> TO 'userB'@'localhost' -> IDENTIFIED BY '1QAZ!qaz';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> SHOW GRANTS FOR 'userB'@'localhost';
+------------------------------------------------------------------------+
| Grants for userB@localhost |
+------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'userB'@'localhost' |
| GRANT SELECT ON `db01`.* TO 'userB'@'localhost' |
| GRANT SELECT, INSERT, UPDATE ON `db123`.`tab02` TO 'userB'@'localhost' |
+------------------------------------------------------------------------+
3 rows in set (0.00 sec)
限制连接类型
语法
GRANT privileges ON [TABLE | FUNCTION | PROCEDURE] {[{database|*}.{table|*}] | *}
TO 'user'@'host'
[IDENTIFIED BY [PASSWORD] 'password']
[,...]
[REQUIRE NONE |
[{SSL | X509} [AND]]
[CIPHER 'cipher' [AND]]
[ISSUER 'issue' [AND]]
[SUBJECT 'subject']]
其中:
- REQUIRE NONE:默认值
- REQUIRE SSL:限制用户只可以进行SSL加密连接,用户账户的mysql客户机将启动带有
--ssl-ca
选项的客户机。 - REQUIRE X509:要求用户账户拥有一个有效的CA证明
- REQUIRE ISSUER:要求用户提供有效的证明,由CA发布的X.509证明。
- REQUIRE SUBJECT:需要具有给定主题的用户账户使用过X.509证明。
- user:用户名
- host:主机名或IP
- password:用户名密码
示例
mysql> CREATE USER 'userC'@'localhost' -> IDENTIFIED BY '1QAZ!qaz';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON db01.*-> TO 'userC'@'localhost'-> IDENTIFIED BY '1QAZ!qaz'-> REQUIRE SSL;
Query OK, 0 rows affected, 1 warning (0.00 sec)
限制连接数
语法
GRANT privilege[, ...] [(column[, ...])] [,...]
ON [TABLE | FUNCTION | PROCEDURE] {[database|*}.{table|*}] | *}
TO 'user'@'host'
[IDENTIFIED BY [PASSWORD] 'password'] [, ...]
[WITH [MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count |MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count] ... ]
- MAX_QUERIES_PER_HOUR:为用户指定每小时执行查询的最大数量,值为0,则表示无限制。
- MAX_UPDATES_PER_HOUR:为用户指定每小时发出的最大更新数目,值为0,则表示无限制。
- MAX_CONNECTIONS_PER_HOUR:为用户指定每小时可以同时连接服务器的最大数量,值为0,则表示无限制。
- MAX_USER_CONNECTIONS:为用户指定同时连接的最大数目。缺省或者值为0,则表示与系统变量
max_user_connections
值同步。 - user:用户名
- host:主机名或IP
- password:用户名密码
示例
mysql> GRANT SELECT ON db01.*-> TO 'userA'@'%'-> IDENTIFIED BY '1QAZ!qaz'-> WITH MAX_QUERIES_PER_HOUR 1000-> MAX_CONNECTIONS_PER_HOUR 100;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> SHOW GRANTS FOR 'userA'@'%';
+-----------------------------------------+
| Grants for userA@% |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'userA'@'%' |
| GRANT SELECT ON `db01`.* TO 'userA'@'%' |
+-----------------------------------------+
2 rows in set (0.00 sec)mysql> SELECT max_questions, max_connections FROM mysql.user WHERE User = 'userA' AND Host = '%';
+---------------+-----------------+
| max_questions | max_connections |
+---------------+-----------------+
| 1000 | 100 |
+---------------+-----------------+
1 row in set (0.00 sec)
回收权限
语法
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, ...];REVOKE privilege[, ...] [(column[, ...])]
ON {[{database|*}.{table|*}] | *}
FROM 'user'@'host' [, ...]
示例
mysql> SHOW GRANTS FOR 'userA'@'%';
+-----------------------------------------+
| Grants for userA@% |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'userA'@'%' |
| GRANT SELECT ON `db01`.* TO 'userA'@'%' |
+-----------------------------------------+
2 rows in set (0.00 sec)mysql> REVOKE ALL PRIVILEGES, GRANT OPTION -> FROM 'userA'@'%';
Query OK, 0 rows affected (0.01 sec)mysql> SHOW GRANTS FOR 'userA'@'%';
+-----------------------------------+
| Grants for userA@% |
+-----------------------------------+
| GRANT USAGE ON *.* TO 'userA'@'%' |
+-----------------------------------+
1 row in set (0.00 sec)
附录
GRANT和REVOKE权限
权限 | 描述 |
---|---|
ALL [PRIVILEGES] | 赋予所有的基本权限,但不包括GRANT OPTION。 |
ALTER | 赋予使用ALTER TABLE语句权限 |
ALTER ROUTINE | 赋予权限允许用户账户修改或者删除存储程序,包括ALTER FUNCTION 和ALTER PROCEDURE语句DROP FUNCTION和DROP PROCEDURE |
CREATE | 赋予CREATE TABLE语句权限 |
CREATE ROUTINE | 赋予权限允许账户创建存储程序,包括CREATE FUNCTION 和CRATE PROCEDURE语句,对于用户创建的任何存储程序,都具有ALTER ROUTINE权限 |
CREATE TEMPORARY TABLES | 赋权允许使用CREATE TEMPORARY TABLES语句 |
CREATE VIEW | 赋予权限允许使用CREATE VIEW语句 |
DELETE | 赋权允许使用DELETE语句 |
DROP | 赋权允许用户执行DROP TABLE和TRUNCATE语句 |
EVENT | 赋权允许用户为事件调度器程序创建事件,允许使用CREATE EVENT、ALTER EVEN和DROP EVEN语句 |
EXECUTE | 允许存储程序的执行 |
FILE | 允许使用SELECT … INFO OUTFILE从一个表导出记录到一个文件中,和LOAD DATA INFILE语句从一个文件向一个表中导入数据 |
GRANT OPTION | 允许使用GRANT语句向用户授权,使用WITH GRANT OPTION进行指定 |
INDEX | 赋权允许使用CREATE INDEX 和DROP INDEX语句 |
INSERT | 赋权允许使用INSERT语句 |
LOCK TABLES | 赋权允许具有SELECT权限的用户使用LOCK TABLES语句 |
PROCESS | 赋权允许使用SHOW FULL PROCESSLIST语句 |
RELOAD | 赋权允许使用FLUSH和RESET语句 |
REPLICATION CLIENT | 赋权允许用户查询主服务器和从属服务器的状态信息 |
REPLICATION SLAVE | 需要复制主服务器,允许从主服务器上读取二进制日志事件 |
SELECT | 赋权允许使用SELECT语句 |
SHOW DATABASES | 赋权对所有数据库,允许使用SHOW DATABASES语句,而不仅仅是用户具有权限时才可以使用 |
SHOW VIEW | 赋权允许使用SHOW CREATE VIEW语句 |
SHUTDOWN | 赋权允许使用电邮shutdown选项的mysqladmin实用工具 |
SUPER | 赋权允许使用CHANGE MASTER、KILL、PURGE MASTER LOGS和SET GLOBAL语句,以及带有debug选项的命令行使用工具mysqladmin |
TRIGGER | 赋权允许用户账户创建和删除触发器,如CREATE TRIGGER和DROP TRIGGER语句 |
UPDATE | 赋权允许用户使用UPDATE语句 |
USAGE | 赋权允许创建没有权限的用户或者在不影响现有权限的情况下修改资源限制。 |
MySQL—用户和权限管控相关推荐
- MySQL用户及权限管理
MySQL用户及权限管理 查看用户及权限 查看用户及作用域(使用范围) 查看用户权限 创建用户及授权 字段参数 用户管理 使用命令提示符登录MySQL mysql -h localhost -u ro ...
- mysql用户的权限分配
2019独角兽企业重金招聘Python工程师标准>>> 因今天在分配数据库权限的时候,同事反映账户不能使用函数,遂搜集资料总结了一番关于mysql用户的权限分配. MySQL 赋予用 ...
- mysql root 登录权限管理_MySQL基础教程(7)MySQL用户与权限管理
在生产环境中通常不建议直接用数据库的root账号来管理每个数据库,这也是为什么安装好MySQL后root用户只能本地登录的原因.正确的做法是为每个业务建立独立的数据库,并且为这些数据库创建一个拥有合适 ...
- mySQL用户和权限管理v1
第01章 MySQL用户和权限管理 mySQL权限控制通过两步控制,能不能连接(验证用户身份),能执行什么操作(验证用户权限). 验证用户身份,需要验证,连接mySQL的计算机的IP地址或计算机名称, ...
- 什么命令用于撤销mysql用户的权限_下列命令中,___命令用于撤销MySQL用户对象权限。...
[多选题]以下属于酒店接待服务项目的是( ) [单选题]ZX14-01-02若 粒子(电量为 )在磁感应强度为 均匀磁场中沿半径为 的圆形轨道运动,则 粒子的德布罗意波长是( ) [单选题]U7- p ...
- mysql使用新建用户的好处_入门MySQL——用户与权限
前言: 前面几篇文章为大家介绍了各种SQL语法的使用,本篇文章将主要介绍MySQL用户及权限相关知识,如果你不是DBA的话可能平时用的不多,但是了解下也是好处多多. 1.创建用户 官方推荐创建语法为: ...
- mysql用户分配权限
在mysql中用户权限是一个很重析 参数,因为台mysql服务器中会有大量的用户,每个用户的权限需要不一样的,下面我来介绍如何给mysql用户分配权限吧,有需要了解的朋友可参考. 1,mysql创建用 ...
- springboot整合shiro,mybatis-plus实现用户角色,权限管控.(完整demo)
资源下载链接:https://download.csdn.net/download/dayonglove2018/13960978 shiro是轻量级的权限管控框架.很早前就接触过.不过一直没有实现了 ...
- Linux命令:MySQL系列之十--MySQL用户和权限管理,mysql管理员密码重置
MySQL用户账号包括:用户名@主机名 用户名:16个字符以内 主机:主机有以下几种表现方式 主机名: mysql IP地址: 172.16.90.111 网络地址:172.16.0.0/255.25 ...
最新文章
- zabbix服务器没有.pid文件,PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决...
- 类型两个数相减_小学数学简便计算12种分类+5种易错类型,打印出来给孩子练习!(可打印!)...
- 手写简版spring --5--资源加载器解析文件注册对象
- Maven命令行使用:mvn clean package(打包)
- VTK:可视化之Lorenz
- [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗?
- One2One主键关联的实现
- java 3种单例模式
- android fragment 弹出对话框,Android中使用Dialogfragment显示对话框
- C++语言基础 —— STL —— 容器与迭代器 —— bitset
- percona zabbix mysql_zabbix采用percona监控mysql主从
- 微信小游戏跳坑之旅(一)——使用白鹭引擎开发之创建项目
- 公司应该鼓励怎样的内斗
- iPhone升级iOS 15卡在请求更新上怎么办?
- power bi数据分析_设置Power BI数据网关
- CreateProcess error=193, %1 不是有效的 Win32 应用程序
- 项目反应理论 matlab,IRTPRO | 项目反应理论软件
- [米家]窗帘电机【立创开源】
- 微信小程tree组件,无限递归
- unity文字逐个出现实现文字打印机效果
热门文章
- python爬取网页上的特定链接_自学python爬虫二:如何正常操作urllib2通过指定的URL抓取网页内容...
- 过滤你不想看见的网页里的东西
- 一文理解接口和抽象类
- new关键字和newInstance()方法的区别?Class.forName()
- 1.x和2.x的区别
- 钉钉开放平台:内网穿透工具 - 服务器免费打造教程
- via浏览器简洁主页html源码 支持搜索提示
- java游戏怎么设置背景色_java-将背景色设置为JButton
- Z-BlogPHP导航主题模版源码 绿色完美版
- oracle 不能导入sql语句,oracle数据库导入.dmp脚本的sql 语句