服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|

服务器之家 - 数据库 - Mysql - mysql命令行下用户管理方法分享

mysql命令行下用户管理方法分享

2019-12-04 13:44海底苍鹰 Mysql

如果有mysql管理工具phpmyadmin的话,我们可以通过图形画界面来对用户进行管理,但是如果没有phpmyadmin这样的管理工具怎么办呢

mysql安装后好,会有一个名字为mysql的数据库,存放用户的表是user,mysql数据库的用户管理就是围绕这个表展开的,当然还有一些表,例如:tables_priv,procs_priv,clumns_priv,information_schema数据库里面的USER_PRIVILEGES等。 

如果有mysql管理工具phpmyadmin的话,我们可以通过图形画界面来对用户进行管理,但是如果没有phpmyadmin这样的管理工具怎么办呢?这个时候,我们可以通过命令行执行sql语句来管理mysql的用户。 

一,添加用户 

1,create user 

语法: 

CREATE USER user_specification 
[, user_specification] ... 

user_specification: 
user [IDENTIFIED BY [PASSWORD] 'password'] 
实例: 

复制代码代码如下:


mysql> create user '44'@'127.0.0.1'; //创建一个44用户 
Query OK, 0 rows affected (0.00 sec) 

mysql> create user '33'@'localhost' identified by 'aaaa'; //创建一个33用户,密码为aaaa 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from mysql.user where user='33' or user='44'\G; //查看一下mysql下的user 


create user 虽然可以创建用户,但是它只是创建用户,并没有给用户分配置权限,所以一般被 grant命令所取代。 

2,grant 

语法: 

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 ...] 

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'] 

ssl_option: 
SSL 
| X509 #要求x509证书 
| CIPHER 'cipher' #加密算法 
| ISSUER 'issuer' #证书发行商 
| SUBJECT 'subject' #主题 

with_option: 
GRANT OPTION 
| MAX_QUERIES_PER_HOUR count #每小时最多执行多少条sql 
| MAX_UPDATES_PER_HOUR count #每小时最多更新多少条数据 
| MAX_CONNECTIONS_PER_HOUR count #每小时最大的联接数是多少 
| MAX_USER_CONNECTIONS count #最大用户联接数 
不要被上面的语法吓倒,其实理解什么意思,就很容易掌握。我是这样理解的。 

grant 权限 on 应用范围(数据库表,方法等) to 用户(用@隔开,前面是用户名后面是主机名'用户名'@'主机名') identified by 密码 require 要求什么的 with 对用户的进行的执行sql的条数控制。 

个人觉得,只要记得上面几个红色的关键词,基本上这个命令就掌握了。 

Privilege

Meaning

ALL [PRIVILEGES]

所有权限

ALTER

可以使用alter table

ALTER ROUTINE

可以使用alter routine

CREATE

可以创建数据库和表

CREATE ROUTINE

可以使用create routine

CREATE TEMPORARY TABLES

可以使用临时表

CREATE USER

可以对用户进添加,删除,重命名,撤销权限

CREATE VIEW

可以创建和修改视图

DELETE

可以删除数据

DROP

可能删除数据库,表,视图等

EVENT

可以使用事件高度器

EXECUTE

可以执行routine

FILE

可以在服务器读写文件

GRANT OPTION

用户有权对自己添加的用衣授权

INDEX

可以创建,删除索引

INSERT

可以插入

LOCK TABLES

可以锁定表

PROCESS

可以使用SHOW PROCESSLIST来查看mysql当前用户的执行sql情况

REFERENCES

Not implemented

RELOAD

可以使用刷新功能

REPLICATION CLIENT

用户可以进行主从同步

REPLICATION SLAVE

主从同步时,从服务器可以从主服务器读取binary log

SELECT

可以查找

SHOW DATABASES

可以使用show databases来查看所有数据库

SHOW VIEW

可以使用show view来查看视图

SHUTDOWN

可以使用mysqladmin中的参数shutdown

SUPER

Enable use of other adminstrative operations such as CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBAL, and mysqladmin debug command

TRIGGER

可以使用触发器

UPDATE

可以进行理会新操作

USAGE

无特权


实例: 

复制代码代码如下:


grant all ON test.* TO 'test'@'localhost'; //test用户拥有test数据库下的所有操作 
grant select,update on test.user to 'test'@'localhost'; //test用户可以对test数据库下user表,进行查找和更新操作 
//test用户的的密码是111111,对user表中的name字段有读取权限,对id,name有更新权限 
grant select(name),update(id,name) on test.user to 'test'@'localhost' identified by '111111'; 
//test用户对所有数据库拥有所有权力,并且要求ssl加密 
grant all privileges on *.* to 'test'@'%' identified by '123456' require ssl 


当添加完用户后,别忘 了 flush privileges; 

二,删除用户 

语法: 

DROP USER user [, user] ... 
实例: 

复制代码代码如下:


drop user 'test2'@'localhost'; //当用drop删除用户进,tables_priv,procs_priv等表中的数据也会被删除 


在这里为什么要用'test2'@'localhost'当用户名,而不是直接test2呢,因为mysql.user这张表,是根用户名和host名决定一个用户,你可查看一下表结构就知道了。 

show create table mysql.user\G;你会发现有这个东西PRIMARY KEY (`Host`,`User`),表示联合主键 

三,修改用户 

语法: 

RENAME USER old_user TO new_user 
[, old_user TO new_user] ... 
实例: 

复制代码代码如下:


rename user 'test2'@'localhost' to 'test'@'%'; 


四,修改权限 

语法: 

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] ... 
grant就给用户分配权限,revoke是把权限从用户的身上拿走。 

实例: 

复制代码代码如下:


mysql> revoke update on *.* from 'tank'@'localhost'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select mysql.user.update_priv from mysql.user where user='tank' and host='localhost'; 
+-------------+ 
| update_priv | 
+-------------+ 

+-------------+ 
1 row in set (0.00 sec) 


去掉tank@localhost这个用户的更新功能,这个是去掉一个权限,如果我要全部去掉怎么办呢,一个一个写太麻烦了,看下面的一个例子 

复制代码代码如下:


mysql> revoke all privileges ,grant option from '33'@'localhost'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> flush privileges; 
Query OK, 0 rows affected (0.01 sec) 


用掉33@localhost这个用户的所有权限 

作者:海底苍鹰

延伸 · 阅读

精彩推荐
  • MysqlMySQL服务器的启动和关闭

    MySQL服务器的启动和关闭

    作为MySQL管理员,一个普通的目标就是确保服务器尽可能地处于运行状态,使得客户机能够随时访问它。但是,有时最好关闭服务器(例如,如果正在进行...

    mysql技术网4362019-10-21
  • Mysqlmysql 数据表中查找重复记录

    mysql 数据表中查找重复记录

    以下sql语句可以实现查找出一个表中的所有重复的记录 ...

    mysql教程网1422019-10-30
  • MysqlMySQL5创建存储过程的示例

    MySQL5创建存储过程的示例

    存储过程可以一次执行多个sql语句,所以php只连接数据库一次就能查询多个语句;不过要返回多个结果集就必须用mysqli扩展来查询,否则会提示错误can't return...

    mysql教程网4172019-10-24
  • MysqlMySQL中字符串函数详细介绍

    MySQL中字符串函数详细介绍

    通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。 ...

    MYSQL教程网1462019-11-18
  • Mysqllinux mysql 找回密码

    linux mysql 找回密码

    linux下mysql忘记密码的解决方法。 ...

    CSDN1272019-10-30
  • Mysql用SQL语句解决mysql导入大数据文件的问题

    用SQL语句解决mysql导入大数据文件的问题

    今天的这篇文章用来讨论如何解决导入mysql大数据文件的问题,其实说的简单了就是一条SQL语句,而如果你是一名SQL高手,那完全可以略过此文。 ...

    mysql教程网4252019-11-10
  • Mysqlmysql 数据插入优化方法

    mysql 数据插入优化方法

    当一个线程对一个表执行一个DELAYED语句时,如果不存在这样的处理程序,一个处理器线程被创建以处理对于该表的所有DELAYED语句。 ...

    mysql教程网1422019-11-12
  • Mysql关于MySQL中的查询开销查看方法详解

    关于MySQL中的查询开销查看方法详解

    一个查询通常可以有很多种执行方式,并且返回同样的结果,而好的程序员应该是找到最好的方式,下面这篇文章主要给大家介绍了关于MySQL中查询开销查看方...

    学习日志2482019-07-04