MySQL授予权限访问拒绝
Posted
技术标签:
【中文标题】MySQL授予权限访问拒绝【英文标题】:MySQL grant privileges access denial 【发布时间】:2016-03-16 02:57:10 【问题描述】:我有一个 Yii2 项目,它操作一些数据库。它有一个基本的数据库连接,我在其中保存用户身份验证数据,第二个连接指向为每个用户自动创建的数据库。
我必须以编程方式创建数据库;所以,我有一个用户project
,它对project\_%
.* 具有全局授予权限和通配符权限。我就是这样做的:
$queries = [
"CREATE DATABASE ".$dbname,
"FLUSH PRIVILEGES",
"CREATE USER '$dbuser'@'localhost' IDENTIFIED BY '$dbpass'",
"GRANT ALL PRIVILEGES ON $dbname.* TO '$dbuser'@'localhost'"
];
foreach($queries as $q) $application->db->createCommand($q)->execute();
$dbname is 'project_'.randomString(8).
我仔细检查了所有project
权限,也检查了mysql
.user
和information_scheme
,我有可授予的权限和授予选项,但仍然出现访问错误:
SQLSTATE[42000]:语法错误或访问冲突:1044 用户“project”@“localhost”拒绝访问数据库“project_sck6jdyb” 正在执行的 SQL 是:GRANT ALL PRIVILEGES ON project_sck6jdyb.* TO 'pu_sck6jDyB'@'localhost'。
MySQL version is 5.6.21
,在XAMPP
,Windows 下运行。这是一个错误,还是我做错了什么?
更新:SHOW GRANTS for project@localhost;
GRANT INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER ON
*.*
TO 'project'@'localhost' IDENTIFIED by PASSWORD '*[secret]' WITH GRANT OPTION将
project
.* 上的所有权限授予'project'@'localhost'使用授予选项将
project\_%
.* 上的所有权限授予“项目”@“本地主机”
【问题讨论】:
能否请addSHOW GRANTS for project
回答您的问题?
@VolkerK 当然,感谢您的建议
【参考方案1】:
要授予权限,您必须具有 GRANT_OPTION 权限,并且您还必须具有要授予的权限。从您的帖子中,您拥有以下权限:INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER
。
尝试仅授予您拥有的权限。我希望这会奏效。
【讨论】:
好吧,如您所见,project
对带有授权选项的通配符名称具有所有权限。我正在尝试将这些权限授予与我的通配符掩码匹配的数据库上的另一个用户。我可以尝试使用所有具有授予选项的全局权限,但我认为这并不安全和整洁。
我看到和你一样的问题。我已经能够通过GRANT ALL PRIVILEGES ON project_sck6jdyb.* TO 'project'@'localhost'
解决它。我还能够使其与以下内容一起使用:GRANT ALL PRIVILEGES ON project%
.* TO 'project'@'localhost'`(删除了数据库名称中的 _)。除非您可以删除“_”,否则这并不能真正帮助您,但它让我相信问题出在数据库名称中使用通配符。我现在没有时间进行更多调查。
感谢您的宝贵时间,每一点额外的研究都会有很大帮助。我将使用通配符并使用结果更新此页面。
当您使用它时,您应该摆脱第一个 GRANT 的 IDENTIFIED BY PASSWORD '*[secret]'
。这应该是CREATE USER
声明的一部分。将它放在 GRANT 中会在 MySQL 5.7 中产生警告。不过,我认为这不是您当前问题的根源。以上是关于MySQL授予权限访问拒绝的主要内容,如果未能解决你的问题,请参考以下文章
尝试授予权限时拒绝用户“root”@“localhost”的访问。如何授予权限?
mysql:在 information_schema 上的访问被拒绝