执行mysql select 查询报错:

SELECT command denied to user 'root'@'localhost' for table "xxx"

问题原因:

权限不足,

解决方法:

还是数据库权限的问题,不知道为啥赋给了所有权限后还是有各种权限问题,看来有空得整理一下mysql所有相关权限的问题了...

下面才是解决这个select权限的方法:

========对于ROOT用户的密码操作(更改用户密码)========

刚刚安装完的Mysql,只一有个root用户,密码为空,而且只能在本机登录!

为root加上密码xxx123:
./bin/mysqladmin -u root password xxx123
或写成
./bin/mysqladmin -uroot password xxx123

加下密码之后,在本进行进入mysql:
./bin/mysql -uroot -p

更改root的密码由xxx123改为yy1234:
./bin/mysqladmin -uroot -pxxx123 password yy1234

=======grant 权限 on 数据库对象 to 用户==========
MySQL 赋予用户权限命令的简单格式可概括为:
grant 权限 on 数据库对象 to 用户

grant 权限 on 数据库对象 to 用户 identified by "密码"

========用户及权限管理:最常用操作实例========
(用户名:dba1,密码:dbapasswd,登录IP:192.168.0.10)

//开放管理MySQL中所有数据库的权限
grant all on *.* to dba1@'192.168.0.10'identified by "dbapasswd";

//开放管理MySQL中具体数据库(testdb)的权限
grant all privileges on testdb to dba1@'192.168.0.10'identified by "dbapasswd";

grant all on testdb to dba1@'192.168.0.10'identified by "dbapasswd";

//开放管理MySQL中具体数据库的表(testdb.table1)的权限
grant all on testdb.teable1 to dba1@'192.168.0.10'identified by "dbapasswd";

//开放管理MySQL中具体数据库的表(testdb.table1)的部分列的权限
grant select(id, se, rank) on testdb.table1 to ba1@'192.168.0.10'identified by "dbapasswd";

//开放管理操作指令
grant select, insert, update, delete on testdb.* to dba1@'192.168.0.10'identified by "dbapasswd";

//回收权限
revoke all on *.* from dba1@localhost;

//查看 MySQL 用户权限

show grants;
show grants for dba1@localhost;

========用户及权限管理:更多更详细实例========

下面用实例来进行说明:

一、grant普通数据用户(test1),查询、插入、更新、删除 数据库(test)中所有表数据的权利。

grant select on test.* to test1@'%';
grant insert on test.* to test1@'%';
grant update on test.* to test1@'%';
grant delete on test.* to test1@'%';

或者,用一条 MySQL 命令来替代:
grant select, insert, update, delete on test.* to test1@'%';

二、grant数据库开发人员(duser),创建表、索引、视图、存储过程、函数。。。等权限。

grant创建、修改、删除 MySQL 数据表结构权限。

grant create on testdb.* to duser@'192.168.0.%';
grant alter on testdb.* to duser@'192.168.0.%';
grant drop   on testdb.* to duser@'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 duser@'192.168.0.%';
grant show   view on testdb.* to duser@'192.168.0.%';

grant 操作 MySQL 存储过程、函数 权限。

grant create routine on testdb.* to duser@'192.168.0.%';

grant alter routine on testdb.* to duser@'192.168.0.%';

grant execute        on testdb.* to duser@'192.168.0.%';

三、grant 普通DBA管理某个MySQL数据库(test)的权限。

grant all privileges on test 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'

六、查看 MySQL 用户权限

查看当前用户(自己)权限:

show grants;

查看其他 MySQL 用户权限:

show grants for dba@localhost;

七、撤销已经赋予给 MySQL 用户权限的权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant all on *.* to  dba@localhost;
revoke all on *.* from dba@localhost;

八、MySQL grant、revoke 用户权限注意事项

1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

grant select on testdb.* to dba@localhost with grant option;

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

补充:

可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。

$ mysql -u root -p
password:mysql> create database test; # 创建数据库
Query OK, 1 row affected (0.00 sec)mysql> show databases; # 查看数据库是否创建成功
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)mysql> grant all on test.* to user1@'%' identified by '123456' with grant option; # 创建特权管理用户
Query OK, 0 rows affected (0.00 sec)mysql> select user,host from mysql.user; # 查看用户创建是否成功
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| user1            | %         |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
| root             | localhost |
| root             | server    |
+------------------+-----------+
5 rows in set (0.00 sec)mysql> show grants for user1; # 查看用户权限
+--------------------------------------------------------------------------------------------------+
| Grants for user1@%                                                                               |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*6BB...2CA2AD9'                        |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user1'@'%' WITH GRANT OPTION                                |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

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" 两部分,后者表示该用户被允许从何地接入。user1@'%' 表示任何地址,默认可以省略。还可以是 "user1@192.168.1.%"、"user1@%.abc.com" 等。数据库格式为 db@table,可以是 "test.*" 或 "*.*",前者表示 test 数据库的所有表,后者表示所有数据库的所有表。

子句 "WITH GRANT OPTION" 表示该用户可以为其他用户分配权限。

我们用 root 再创建几个用户,然后由 test 数据库的管理员 user1 为他们分配权限。

mysql> create user user2 identified by '123456', user3 identified by 'abcd';
Query OK, 0 rows affected (0.00 sec)mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| user1            | %         |
| user2            | %         |
| user3            | %         |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
| root             | localhost |
| root             | server    |
+------------------+-----------+
7 rows in set (0.00 sec)

好了,我们退出改用 user1 登录并针对 test 数据库进行操作。

mysql> quit # 退出
Bye$ mysql -u user1 -p123456 test # 使用新用户登录mysql> select database(); # 确认当前工作数据库
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)mysql> select current_user(); # 确认当前工作账户
+----------------+
| current_user() |
+----------------+
| user1@%        |
+----------------+
1 row in set (0.00 sec)

继续,创建一个数据表。

mysql> create table table1 # 创建表-> (->  name varchar(50),->  age integer-> );
Query OK, 0 rows affected (0.02 sec)mysql> show tables; # 查看表是否创建成功
+----------------+
| Tables_in_test |
+----------------+
| table1         |
+----------------+
1 row in set (0.00 sec)mysql> describe table1; # 查看表结构
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)mysql> insert into table1 values('Tom', 20); # 插入记录
Query OK, 1 row affected (0.00 sec)mysql> select * from table1; # 查询记录
+------+------+
| name | age  |
+------+------+
| Tom  |   20 |
+------+------+
1 row in set (0.00 sec)

接下来我们为 user2, user3 分配权限。

mysql> grant select on test.* to user2; # 为 user2 分配 SELECT 权限。
Query OK, 0 rows affected (0.00 sec)mysql> grant select on test.* to user3; # 为 user3 分配 SELECT 权限。
Query OK, 0 rows affected (0.00 sec)mysql> grant insert, update on test.* to user2; # 再为 user2 增加 INSERT, UPDATE 权限。
Query OK, 0 rows affected (0.00 sec)

好了,我们退出,切换成 user2 操作看看。

$ mysql -u user2 -p123456mysql> use test; # 切换工作数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changedmysql> select database(); # 验证当前工作数据库
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)mysql> select user(); # 验证当前账户
+-----------------+
| user()          |
+-----------------+
| user2@localhost |
+-----------------+
1 row in set (0.00 sec)mysql> show grants for user2; # 查看当前用户权限,显然后来添加的 INSERT, UPDATE 被添加了。
+--------------------------------------------------------------------------------------------------+
| Grants for user2@%                                                                               |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*6BB837....2C9'                        |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'user2'@'%'                                          |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

进行操作测试。

mysql> insert into table1 values("Jack", 21); # INSERT 操作成功
Query OK, 1 row affected (0.00 sec)mysql> update table1 set age=22 where name='Jack'; # UPDATE 操作成功
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from table1; # SELECT 操作成功
+------+------+
| name | age  |
+------+------+
| Tom  |   20 |
| Jack |   22 |
+------+------+
2 rows in set (0.00 sec)mysql> delete from table1 where age=22; # DELETE 操作无权限
ERROR 1142 (42000): DELETE command denied to user 'user2'@'localhost' for table 'table1'

我们切换回 user1 管理账户,移除 user2 的 UPDATE 权限看看。

$ mysql -u user1 -p123456 testmysql> revoke update on test.* from user2; # 移除 UPDATE 权限
Query OK, 0 rows affected (0.00 sec)

再次切换回 user2。

$ mysql -u user2 -p123456 testmysql> show grants for user2; # UPDATE 权限被移除
+--------------------------------------------------------------------------------------------------+
| Grants for user2@%                                                                               |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*6B...2AD9'                            |
| GRANT SELECT, INSERT ON `test`.* TO 'user2'@'%'                                                  |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)mysql> update table1 set age=23 where name='Jack'; # 不在拥有 UPDATE 权限
ERROR 1142 (42000): UPDATE command denied to user 'user2'@'localhost' for table 'table1'

好了,到此我们基本完成了创建用户和分配权限的操作。接下来,我们回到 root 进行修改用户密码和删除用户操作。

$ mysql -u root -p123456mysql> set password for user3=password('abcabc'); # 修改用户 user3 密码
Query OK, 0 rows affected (0.00 sec)mysql>flush privileges; # 刷新权限表(通常只在直接修改相关管理数据表后需要该操作)
Query OK, 0 rows affected (0.00 sec)mysql> revoke all on *.* from user2; # 移除 user2 在所有数据库上的权限
Query OK, 0 rows affected (0.00 sec)mysql> drop user user2; # 删除 user2 账户
Query OK, 0 rows affected (0.00 sec)mysql> select user,host from mysql.user; # 验证删除结果
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| user1            | %         |
| user3            | %         |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
| root             | localhost |
| root             | server    |
+------------------+-----------+
6 rows in set (0.00 sec)

用户 user2 无法再次使用。

$ mysql -u user2 -p123456 testERROR 1045 (28000): Access denied for user 'user2'@'localhost' (using password: YES)

试试 user3。

$ mysql -u user3 -pabc test # 连接失败!哦,对了,我们修改了密码。
ERROR 1045 (28000): Access denied for user 'user3'@'localhost' (using password: YES)$ mysql -u user3 -pabcabc test # 新密码成功mysql> select * from table1; # SELECT 操作成功
+------+------+
| name | age  |
+------+------+
| Tom  |   20 |
| Jack |   22 |
+------+------+
2 rows in set (0.00 sec)

要修改自己的密码直接执行 "set password = password('new_password');" 即可。

------- 摘要 --------------------------------------

创建用户:

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;

MySQL用户与权限管理相关推荐

  1. MySQL用户及权限管理

    MySQL用户及权限管理 查看用户及权限 查看用户及作用域(使用范围) 查看用户权限 创建用户及授权 字段参数 用户管理 使用命令提示符登录MySQL mysql -h localhost -u ro ...

  2. mysql root 登录权限管理_MySQL基础教程(7)MySQL用户与权限管理

    在生产环境中通常不建议直接用数据库的root账号来管理每个数据库,这也是为什么安装好MySQL后root用户只能本地登录的原因.正确的做法是为每个业务建立独立的数据库,并且为这些数据库创建一个拥有合适 ...

  3. mySQL用户和权限管理v1

    第01章 MySQL用户和权限管理 mySQL权限控制通过两步控制,能不能连接(验证用户身份),能执行什么操作(验证用户权限). 验证用户身份,需要验证,连接mySQL的计算机的IP地址或计算机名称, ...

  4. mysql root用户可以同时几个人连接_重学MySQL系列(四):10分钟快速掌握MySQL用户与权限管理

    在这篇文章中,我们来聊聊怎么管理MySQL的用户及如何为不同用户分配不同的管理权限,其实,在日常使用MySQL的过程中,这部分的工作是由DBA(数据管理员)来完成的. 而我们作为一般的开发人员,只要拿 ...

  5. mysql用户及权限管理_MySQL 用户及权限管理

    1.mysql用户的定义 在mysql中,用户由用户名和主机域组成的. 1.1 用户名的写法 mysql> create user test1@'localhost'; 注意:用户名不要以数字. ...

  6. Linux命令:MySQL系列之十--MySQL用户和权限管理,mysql管理员密码重置

    MySQL用户账号包括:用户名@主机名 用户名:16个字符以内 主机:主机有以下几种表现方式 主机名: mysql IP地址: 172.16.90.111 网络地址:172.16.0.0/255.25 ...

  7. mysql 列级权限授予用户_mysql 用户及权限管理 小结

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

  8. mysql-front权限管理_mysql 用户及权限管理 小结

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

  9. mysql用户的权限分配

    2019独角兽企业重金招聘Python工程师标准>>> 因今天在分配数据库权限的时候,同事反映账户不能使用函数,遂搜集资料总结了一番关于mysql用户的权限分配. MySQL 赋予用 ...

最新文章

  1. Linux命令:模拟电信联通双网络智能解析域名
  2. 11、E-commerce in Your Inbox:Product Recommendations at Scale-----产品推荐(prod2vec和user2vec)...
  3. 初步了解Linux proc文件系统
  4. Windows下使用Java API操作HDFS的常用方法
  5. 产品待办列表的几个最佳实践
  6. 提交自己开发的MR作业到YARN上运行的步骤
  7. why get_expanded_entityset is not called but works in Ke's laptop
  8. .NET Forms身份验证
  9. ipone怎么没有科学计算机,ipone7与ipone8其实根本没什么区别呀
  10. kmp 模式匹配算法学习笔记
  11. 没钱没资本可以创业不,想创业的人怎么办
  12. 怎样用计算机进行文字采集,怎么将照片上的文字自动录入电脑
  13. 微服务~Consul服务注册与发现
  14. JS的内建函数reduce
  15. 【手写数字识别】基于matlab CNN网络手写数字识别分类【含Matlab源码 1286期】
  16. ttf字体文件裁剪,字体文件压缩,字体文件提取
  17. 三极管共射放大电路调试
  18. 程序员在囧途之垃圾创业团队 .
  19. 名利如过往云烟,知足就好
  20. SampleGrabber开发问题与解决方案

热门文章

  1. threejs加载模型挤压变形_车用水阀套零件冷挤压成形数值模拟试验研究
  2. android combobox控件,Android中的组合框
  3. java ipv6校验_java - IPv6地址验证和规范化[关闭] - 堆栈内存溢出
  4. 3d打印 路径规划_3D打印螺旋桨技术的应用和挑战
  5. TortoiseSVN设置比较工具为BeyondCompare
  6. 高新面试系列 性格篇
  7. 薄壁轴承摩擦力矩_机器人四点接触薄壁轴承详细介绍
  8. haproxy透传用户ip-方法和原理
  9. Python断言方法:assert
  10. 浦银行面试总结(信息科技部)