MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用。如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接。

在 MySQL 命令行模式下输入如下命令可以为 MySQL 创建一个新用户:

新用户创建完成,但是此刻如果以此用户登陆的话,会报错,因为我们还没有为这个用户分配相应权限,分配权限的命令如下:

授予username用户在所有数据库上的所有权限。

如果此时发现刚刚给的权限太大了,如果我们只是想授予它在某个数据库上的权限,那么需要切换到root 用户撤销刚才的权限,重新授权:

甚至还可以指定该用户只能执行 select 和 update 命令:

这样一来,再次以username登陆 MySQL,只有wordpress数据库是对其可见的,并且如果你只授权它select权限,那么它就不能执行delete 语句。

另外每当调整权限后,通常需要执行以下语句刷新权限:

删除刚才创建的用户:

仔细上面几个命令,可以发现不管是授权,还是撤销授权,都要指定响应的host(即 @ 符号后面的内容),因为以上及格命令实际上都是在操作mysql 数据库中的user表,可以用如下命令查看相应用户及对应的host:

MySQL Study之--MySQL用户及权限管理MySQL服务器通过MySQL权限表来控制用户对数据库的访问,MySQL权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些MySQL权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。db权限表:记录各个帐号在各个数据库上的操作权限。table_priv权限表:记录数据表级的操作权限。columns_priv权限表:记录数据列级的操作权限。host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。案例分析:一、创建用户并授权(root用户)[root@mysrv ~]# mysql -u root -poraclemysql> select version()\g+-------------------------------------------+| version() |+-------------------------------------------+| 5.6.25-enterprise-commercial-advanced-log |+-------------------------------------------+1 row in set (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || prod || test |+--------------------+5 rows in set (0.01 sec)1、建立tom用户并授权(特权管理用户)mysql> grant all on prod.* to 'tom'@'%' identified by 'tom' with grant option;Query OK, 0 rows affected (0.00 sec)查看用户创建是否成功:mysql> select user,host from user ;

查看tom用户的授权:mysql> show grants for tom;+----------------------------------------------------------------------------------------------------+| Grants for tom@% |+----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' || GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION |+----------------------------------------------------------------------------------------------------+GRANT 语法:GRANT privileges (columns)ON whatTO user IDENTIFIED BY "password"WITH GRANT OPTION权限列表:ALTER: 修改表和索引。CREATE: 创建数据库和表。DELETE: 删除表中已有的记录。DROP: 抛弃(删除)数据库和表。INDEX: 创建或抛弃索引。INSERT: 向表中插入新行。REFERENCE: 未用。SELECT: 检索表中的记录。UPDATE: 修改现存表记录。FILE: 读或写服务器上的文件。PROCESS: 查看服务器中执行的线程信息或杀死线程。RELOAD: 重载授权表或清空日志、主机缓存或表缓存。SHUTDOWN: 关闭服务器。ALL: 所有权限,ALL PRIVILEGES同义词。USAGE: 特殊的 "无权限" 权限。用 户账户包括 "username" 和 "host" 两部分,后者表示该用户被允许从何地接入。tom@'%' 表示任何地址,默认可以省略。还可以是 "tom@192.168.1.%"、"tom@%.abc.com" 等。数据库格式为 db@table,可以是 "test.*" 或 "*.*",前者表示 test 数据库的所有表,后者表示所有数据库的所有表。子句 "WITH GRANT OPTION" 表示该用户可以为其他用户分配权限。2、我们用 root 再创建几个用户,然后由 test 数据库的管理员tom为他们分配权限。mysql> create user 'tom1' identified by 'tom1' ,'tom2' identified by 'tom2';Query OK, 0 rows affected (0.00 sec)mysql> select user,host from user ;

root用户退出,tom登陆,并授权用户访问prod库[root@mysrv ~]# mysql -u tom -ptomERROR 1045 (28000): Access denied for user 'tom'@'localhost' (using password: YES)tom用户竟不能登陆!!!再对tom用户授权:mysql> grant all on prod.* to 'tom'@'localhost' identified by 'tom' with grant option;;Query OK, 0 rows affected (0.00 sec)mysql> show grants for tom;+----------------------------------------------------------------------------------------------------+| Grants for tom@% |+----------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'tom'@'%' IDENTIFIED BY PASSWORD '*71FF744436C7EA1B954F6276121DB5D2BF68FC07' || GRANT ALL PRIVILEGES ON `prod`.* TO 'tom'@'%' WITH GRANT OPTION |+----------------------------------------------------------------------------------------------------+2 rows in set (0.00 sec)mysql> use mysql;Database changedmysql> select user,host from user ;

tom登陆:[root@mysrv ~]# mysql -u tom -ptom prodmysql> select database();+------------+| database() |+------------+| prod |+------------+1 row in set (0.01 sec)mysql> select current_user();+----------------+| current_user() |+----------------+| tom@localhost |+----------------+1 row in set (0.00 sec)创建表:mysql> show tables;+----------------+| Tables_in_prod |+----------------+| t1 |+----------------+1 row in set (0.00 sec)mysql> create table t2 as select * from t1;Query OK, 3 rows affected (0.15 sec)Records: 3 Duplicates: 0 Warnings: 0查看表信息:mysql> desc t2;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(10) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+2 rows in set (0.01 sec)mysql> show create table t2;+-------+---------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+---------------------------------------------------------------------------------------------------------------------------+| t2 | CREATE TABLE `t2` (`id` int(11) DEFAULT NULL,`name` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 |+-------+---------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)mysql> show create table t2\G;*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`id` int(11) DEFAULT NULL,`name` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)mysql> select * from t2;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose |+------+-------+3 rows in set (0.00 sec)3、tom用户为tom1,tom2授权mysql> grant select on prod.* to tom1;Query OK, 0 rows affected (0.00 sec)mysql> grant select on prod.* to tom2;Query OK, 0 rows affected (0.02 sec)mysql> grant insert,update on prod.* to tom2;Query OK, 0 rows affected (0.00 sec)tom2登陆(从远程登陆):C:\Users\Administrator>mysql -h 192.168.8.240 -utom2 -ptom2mysql> select database();+------------+| database() |+------------+| NULL |+------------+1 row in set (0.00 sec)mysql> use prod;Database changedmysql> select database();+------------+| database() |+------------+| prod |+------------+1 row in set (0.00 sec)mysql> select current_user();+----------------+| current_user() |+----------------+| tom2@% |+----------------+1 row in set (0.00 sec)mysql> show grants for tom2;+------------------------------------------------------------------+| Grants for tom2@% |+------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'tom2'@'%' IDENTIFIED BY PASSWORD || GRANT SELECT, INSERT, UPDATE ON `prod`.* TO 'tom2'@'%' |+------------------------------------------------------------------+2 rows in set (0.00 sec)mysql> show tables;+----------------+| Tables_in_prod |+----------------+| t1 || t2 |+----------------+2 rows in set (0.00 sec)mysql> select * from t1;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose |+------+-------+3 rows in set (0.00 sec)mysql> select * from t2;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose |+------+-------+3 rows in set (0.00 sec)mysql> insert into t1 values (40,'john');Query OK, 1 row affected (0.00 sec)mysql> commit;Query OK, 0 rows affected (0.09 sec)mysql> select * from t1;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose || 40 | john |+------+-------+4 rows in set (0.00 sec)mysql> update t1 set name='ellen' where id=40;Query OK, 1 row affected (0.01 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from t1;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose || 40 | ellen |+------+-------+4 rows in set (0.00 sec)mysql> delete from t1;ERROR 1142 (42000): DELETE command denied to user 'tom2'@'192.168.8.254' for table 't1'mysql> commit;Query OK, 0 rows affected (0.05 sec)mysql> select * from t1;+------+-------+| id | name |+------+-------+| 10 | tom || 20 | jerry || 30 | rose || 40 | ellen |+------+-------+4 rows in set (0.00 sec)4、回收tom2的update权限:mysql> revoke update on prod.* from tom2;Query OK, 0 rows affected (0.00 sec)tom2再重新登陆:C:\Users\Administrator>mysql -h 192.168.8.240 -utom2 -ptom2mysql> use prod;Database changedmysql> update t1 set name='lily' where id=10;ERROR 1142 (42000): UPDATE command denied to user 'tom2'@'192.168.8.254' for table 't1'---update失败!二、修改用户口令:1、root用户修改普通用户口令mysql> set password for tom1=password('oracle');Query OK, 0 rows affected (0.01 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)tom1重新登陆:C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -ptom1Warning: Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'tom1'@'192.168.8.254' (using password: YES)---旧口令登陆失败!C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -poraclemysql>2、普通用户修改自己密码:C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -poraclemysql> set password=password('tom1');Query OK, 0 rows affected (0.00 sec)重新登陆:C:\Users\Administrator>mysql -h 192.168.8.240 -utom1 -ptom1mysql>---新密码登陆成功 !三、删除用户:1、回收用户所有权限mysql> revoke all on prod.* from tom2;Query OK, 0 rows affected (0.01 sec)2、删除用户mysql> drop user tom2;Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> select user,host from user;

------- 摘要 --------------------------------------创建用户:GRANT insert, update ON testdb.* TO user1@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;CREATE USER user2 IDENTIFIED BY 'password';分配权限:GRANT select ON testdb.* TO user2;查看权限:SHOW GRANTS FOR user1;修改密码:SET PASSWORD FOR user1 = PASSWORD('newpwd');SET PASSWORD = PASSWORD('newpwd');移除权限:REVOKE all ON *.* FROM user1;删除用户:DROP USER user1;数据库列表:SHOW DATABASES;数据表列表:SHOW TABLES;当前数据库:SELECT DATABASE();当前用户:SELECT USER();数据表结构:DESCRIBE table1;刷新权限:FLUSH PRIVILEGES;grant和revoke可以在几个层次上控制访问权限1,整个服务器,使用 grant ALL 和revoke ALL2,整个数据库,使用on database.*3,特点表,使用on database.table4,特定的列5,特定的存储过程user表中host列的值的意义% 匹配所有主机localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问;::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user@’%’grant insert on testdb.* to common_user@’%’grant update on testdb.* to common_user@’%’grant delete on testdb.* to common_user@’%’或者,用一条 MySQL 命令来替代:grant select, insert, update, delete on testdb.* to common_user@’%’grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。grant 创建、修改、删除 MySQL 数据表结构权限。grant create on testdb.* to developer@’192.168.0.%’;grant alter on testdb.* to developer@’192.168.0.%’;grant drop on testdb.* to developer@’192.168.0.%’;grant 操作 MySQL 外键权限。grant references on testdb.* to developer@’192.168.0.%’;grant 操作 MySQL 临时表权限。grant create temporary tables on testdb.* to developer@’192.168.0.%’;grant 操作 MySQL 索引权限。grant index on testdb.* to developer@’192.168.0.%’;grant 操作 MySQL 视图、查看视图源代码 权限。grant create view on testdb.* to developer@’192.168.0.%’;grant show view on testdb.* to developer@’192.168.0.%’;grant 操作 MySQL 存储过程、函数 权限。grant create routine on testdb.* to developer@’192.168.0.%’; -- now, can show procedure statusgrant alter routine on testdb.* to developer@’192.168.0.%’; -- now, you can drop a proceduregrant execute on testdb.* to developer@’192.168.0.%’;grant 普通 DBA 管理某个 MySQL 数据库的权限。grant all privileges on testdb to dba@’localhost’其中,关键字 “privileges” 可以省略。grant 高级 DBA 管理 MySQL 中所有数据库的权限。grant all on *.* to dba@’localhost’MySQL grant 权限,分别可以作用在多个层次上。1. grant 作用在整个 MySQL 服务器上:grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库2. grant 作用在单个数据库上:grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。3. grant 作用在单个数据表上:grant select, insert, update, delete on testdb.orders to dba@localhost;4. grant 作用在表中的列上:grant select(id, se, rank) on testdb.apache_log to dba@localhost;5. grant 作用在存储过程、函数上:grant execute on procedure testdb.pr_add to ’dba’@’localhost’grant execute on function testdb.fn_add to ’dba’@’localhost’注意:修改完权限以后 一定要刷新服务,或者重启服务,刷新服务用:FLUSH PRIVILEGES。

mysql用户和权限管理总结_【转】mysql 用户及权限管理 小结相关推荐

  1. mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?

    我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...

  2. Mysql当前的根密码核查_在MySQL数据库中复位根用户的密码的方法

    如果你从未为MySQL设置根用户密码,服务器在以根用户身份进行连接时不需要密码.但是,建议你为每个账户设置密码. 如果你以前设置了根用户密码,但却忘记了该密码,可设置新的密码.下述步骤是针对Windo ...

  3. rbac 一个用户对应多个账号_电商后台系统:管理后台之账号管理(一)

    系统管理模块顾名思义,是对整个系统的设置和管理,是后台里面比较高的一个权限,一般只有少数管理员才会拥有.本文主要说明管理后台系统的系统管理模块. 后台产品最主要的是要理解业务,然后根据业务去梳理流程和 ...

  4. mysql中防呆是什么_别让用户发呆——设计中的防呆策略

    生活中总会有些状况让我们无所适从摸不着头脑:面对一排电灯或空调的按钮,哪个才是控制我想要的?开锁时掏出一把钥匙,哪个才是正确的?拿起U盘插入电脑,朝那个方向才是对的?--类似的犹豫充分说明,你呆住了. ...

  5. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)

    站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...

  6. mysql数据库是一个软件呐_【MySQL数据库软件、SQL】

    内容 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库. ...

  7. navicat mysql两张表建立联系_初识MySQL

    初识MySQL 为什么学习数据库 1.岗位技能需求 2.现在的世界,得数据者得天下 3.存储数据的方法 4.程序,网站中,大量数据如何长久保存? 5.数据库是几乎软件体系中最核心的一个存在. 什么是数 ...

  8. mysql修改root密码 工具下载_学习mysql root密码修改的方法及工具使用

    本文介绍 学习mysql root密码修改的方法及工具使用,包括使用phpmyadmin.mysql服务配置工具.mysqladmin等. 供大家学习参考. 一,phpmyadmin 使用phpmya ...

  9. mysql必知必会笔记_《MySql必知必会》笔记整理

    数据库基础 关键词: 数据库 表(表名唯一,取决多个因素,如不同数据库的表可以同名) 模式(关于数据库和表的布局及特性的信息) 列(表中的字段) 行[行(raw)和记录(record)很大程度可以等同 ...

  10. mysql启动后在哪里编程_启动mysql后怎么连接数据库

    推荐答案 一.mysql安装 百度mysql下载一个即可.只是注意一下几个重要的数据: 第一个就是Port Number :3306.端口号默认3306,一般不需要改,如果改了,请记住这个端口号. 第 ...

最新文章

  1. PPT绘制示意图视频+文字版本-一篇就学会
  2. ym——Android之ListView性能优化
  3. 终于装上了office2010
  4. Python+Selenium+Unittest框架使用——Selenium——模拟操作浏览器(三)
  5. php网站制作商品结算怎么做,一种以让产品、信息快速同步多网站销售并结算的技术的制作方法...
  6. 要找到现阶段最适合自己的方法
  7. 洛谷 P1417 烹调方案 (01背包拓展)
  8. python高维数据的读取_索引访问高维数组_Python数据分析与科学计算基础篇1:NumPy图解,使抽象的数据具象为可触摸的图形_深度学习视频-51CTO学院...
  9. lightgbm过去版本安装包_谨慎更新华为EMUI10.1版本
  10. 基于耗散性的matlab,基于耗散能的沥青抗老化性能评价方法与流程
  11. skiller v3 beta2 发布
  12. redis设置用户名和密码
  13. 关于的无穷级数的一点总结
  14. 2022公司邮箱域名如何申请?公司邮箱域名怎么设置?
  15. 【AI测试】人工智能测试整体介绍——第三部分
  16. 如何查询windows的版本号?
  17. linux中文本编辑vi命令插入技巧
  18. 提取图像中颜色交界处的坐标
  19. 微信域名防封检测方法
  20. @Valid和@Validated验证List集合--网络踩坑记录

热门文章

  1. 31部黑客电影,你看过哪几部?
  2. 数模算法:排队论模型
  3. weblogic开发EJB
  4. Golden Gate - 概念和机制
  5. 绘制自己的人际关系图_建立人脉,从绘制一张人际关系图谱开始。
  6. Ubuntu下安装JRE7
  7. 工程项目经济评价的基本方法
  8. PCWorld:流量日趋集中 大公司影响整个互联网
  9. 驱动人生、驱动精灵等绿色去广告单文件版合集
  10. 防止linux子系统关闭,Linux关闭selinux安全子系统的方法