`
hejianhuacn
  • 浏览: 69300 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

【转】MySQL中GRANT权限的时候特殊字符转义

阅读更多

碰到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命令详解

    MySQL-Grant命令说明

    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)

    如题,MySQL:grant_语法详解(MySQL_5.X) ————————————

    MySQL DCL - 权限控制.md

    此Markdown文档提供了MySQL数据库中DCL权限控制操作的示例代码和说明。通过文档,您可以学习...无论是初学者还是有经验的用户,都可以通过本文档来学习如何在MySQL中进行权限管理,确保数据库资源的安全性和完整性。

    Mysql权限管理grant命令使笔记

    MySQL 赋予用户权限命令的简单格式可概括为: 代码如下:grant 权限 on 数据库对象 to 用户 [identified by ‘密码’] 最常用的,弄主从同步的时候,给从库的slave用户设置拥有所有权限,权限all仅允许其从192.168....

    mysql 赋给用户权限 grant all privileges on.docx

    mysql 赋给用户权限 grant all privileges on.docx

    MySQL数据库中用GRANT语句增添新用户

    有两个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。本文将为大家介绍MySQL数据库中如何用GRANT语句增添新用户。

    MySQL中文参考手册.chm

    5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK) 6 MySQL 存取权限系统 6.1 权限系统做什么 6.2 MySQL用户名和口令 6.3 与MySQL服务器连接 6.4 使你的口令安全 6.5 MySQL 提供的...

    mysql5.7arm64.zip麒麟arm64架构下的deb安装包

    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;

    MySQL中文参考手册

    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数据库管理常用命令

    授权部分建立用户并授权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用户密码中的特殊字符叹号(!)的妙用

    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数据库:用户的权限管理.pptx

    用户权限:和MySQL所有的数据库相关。 ;给某用户授予权限可以使用GRANT语句。使用SHOW GRANTS语句可以查看当前账户拥有什么权限。 GRANT语法格式: GRANT 权限1[(列名列表1)] [,权限2 [(列名列表2)]] ... ON [目标] ...

    设置mysql远程连接

    5、 查询mysql数据库中的用户: Select host,user,password from mysql; 6、 授权给root用户可以从任何主机使用密码为’hkgt123’登录MYSQL数据库: GRANT ALL PRIVILEGES ON *.* TO root@’%’ IDENTIFIED BY ...

    mysql的安装

    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

    GRANT和 revoke

    JIRA+MYSQL配置

    1、JDK、JIRA、MySQL 安装完毕,停止 JIRA 服务 创建数据库: mysql create database jiradb character set ‘gb2312′; 创建用户并赋与权限: create user jirauser identified by ‘jira’; grant all ...

Global site tag (gtag.js) - Google Analytics