碰到grant的问题,发现这篇文章,做个转载:
原文地址:http://blog.useasp.net/archive/2013/05/21/MySQL-special-character-escape-method-when-grant-privilages-to-user.aspx
在MySQL中使用了下划线的数据库名,今天在GRANT的时候,死活无法为用户赋予权限,一直报错。查看了官方的文档,文档中说:如果使用下划线的数据库在使用GRANT的时候,需要对数据库的下划线进行转义。
官方文档的全文如下:
1
2
3
4
5
6
7
8
|
The “_” and “%” wildcards are permitted when specifying database names in GRANT statements that grant privileges at the global or database levels. This means, for example, that if you want to use a “_” character as part of a database name, you should specify it as “\_” in the GRANT statement, to prevent the user from being able to access additional databases matching the wildcard pattern; for example, GRANT ... ON `foo\_bar`.* TO .... |
GRANT语句用于在全局层级或数据库层级赋予权限。当在GRANT语句中指定数据库名称时,允许使用‘_’和‘%’通配符。这意味着,如果您想要使用‘_’字符作为一个数据库名称的一部分,您应该在GRANT语句中指定它为‘\_’,以防止用户可以访问其它符合此通配符格式的数据库;例如,GRANT ... ON `foo\_bar`.* TO ...。
说明非常明确,就是在碰到下划线和百分号的时候,为了防止GRANT的时候权限漂移,需要明确的对这两个通配符进行转义,转义符为\,因此有了如下的语句:
1
|
GRANT ALL ON 'db\_test' .* TO 'test_user' ;
|
恩,看上去是如此的完美,但,非常遗憾的是,MySQL接受到这个语句直接报错:
1
2
|
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '' db\_test '.* TO ' test_user '' at line 1
|
经过多次测试,终于发现这个语法应该变成:
1
|
GRANT ALL ON `db\_test`.* TO 'test_user' ;
|
发现不同了吗?至少我当时没有发现,经过尝试才发现,转义的时候,不仅原有的通配符需要反斜杆[\]进行转义,就连包含转义字串的引号也要变成反勾号!反勾号是啥?就是标准键盘中主键盘数字键1前面的那个键(也就是ESC下面的那个键)。
经过修正后的SQL语句非常顺利的执行了,类似的情况,在GRANT中需要注意的是TO后面的User,平时User字串是可以不用单引号的,但如果User字串中包含了中划线(-)的时候,或者含有通配符(%)的时候,则必须要有引号包含。
注,jdbc的url 中同样需要转义:
url=jdbc:mysql://127.0.0.1:3306/db\_dev?useUnicode=true&characterEncoding=utf-8
相关推荐
MySQL的Grant命令详解
MySQL-Grant命令说明,管理用户,分配权限
一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 代码如下:grant select on testdb.* to common_user@’%’grant insert on testdb.* to common_user@’%’grant update on testdb.* ...
如题,MySQL:grant_语法详解(MySQL_5.X) ————————————
此Markdown文档提供了MySQL数据库中DCL权限控制操作的示例代码和说明。通过文档,您可以学习...无论是初学者还是有经验的用户,都可以通过本文档来学习如何在MySQL中进行权限管理,确保数据库资源的安全性和完整性。
MySQL 赋予用户权限命令的简单格式可概括为: 代码如下:grant 权限 on 数据库对象 to 用户 [identified by ‘密码’] 最常用的,弄主从同步的时候,给从库的slave用户设置拥有所有权限,权限all仅允许其从192.168....
mysql 赋给用户权限 grant all privileges on.docx
有两个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。本文将为大家介绍MySQL数据库中如何用GRANT语句增添新用户。
5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK) 6 MySQL 存取权限系统 6.1 权限系统做什么 6.2 MySQL用户名和口令 6.3 与MySQL服务器连接 6.4 使你的口令安全 6.5 MySQL 提供的...
mysql5.7arm64.zip mysql5.7在麒麟arm64架构下的deb安装包 1.安装deb文件 ...mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; mysql> flush privileges;
o 6.11 向MySQL增加新用户权限 o 6.12 怎样设置口令 o 6.13 存取拒绝(Access Denied)错误的原因 o 6.14 怎样使MySQL安全以对抗解密高手(cracker) * 7 MySQL 语言参考 o 7.1 文字:怎样写字符串和数字 + 7.1.1 ...
授权部分建立用户并授权mysql> grant all on location.* to gk1020@'10.1.11.71' identified by 'gk1020'。 取消授权mysql> revoke all on location.* from gk1020@'10.1.11.71'。 刷新权限mysql> flush privileges...
mysql> grant all privileges on wubx.* to ‘wubx’@’172.16.100.185′ identified by ‘fd52!wubx&,’; Query OK, 0 rows affected (0.00 sec) mysql>quit; #mysql -h 172.16.100.185 -u wubx -pfd52!wubx&, -...
用户权限:和MySQL所有的数据库相关。 ;给某用户授予权限可以使用GRANT语句。使用SHOW GRANTS语句可以查看当前账户拥有什么权限。 GRANT语法格式: GRANT 权限1[(列名列表1)] [,权限2 [(列名列表2)]] ... ON [目标] ...
5、 查询mysql数据库中的用户: Select host,user,password from mysql; 6、 授权给root用户可以从任何主机使用密码为’hkgt123’登录MYSQL数据库: GRANT ALL PRIVILEGES ON *.* TO root@’%’ IDENTIFIED BY ...
mysql yum install mysql mysql-server mysql-devel 完成后,用 /etc/init.d/mysqld start 启动mysql 启动mysql控制台: mysql mysql>; USE mysql; mysql>; UPDATE user SET Password=PASSWORD('...
GRANT和 revoke
1、JDK、JIRA、MySQL 安装完毕,停止 JIRA 服务 创建数据库: mysql create database jiradb character set ‘gb2312′; 创建用户并赋与权限: create user jirauser identified by ‘jira’; grant all ...