(最初在 StackOverflow 上询问,但有人建议我在这里询问) - MySQL 5.1.41 社区(Windows Server 2003) - .Net/Connector 6.1.3.0
我刚刚创建了一个新用户,我授予的权限不是架构权限,而是特定表的权限。换句话说,没有设置全局或架构级别的权限,只设置了几个特定表的权限。这似乎是一个完全可以接受的策略,根据我准备好的内容,MySQL 将搜索:
- 全球的
- 模式/数据库
- 桌子
- 柱子
获得适当的权限。但是,当我尝试使用这个新用户帐户打开与服务器的连接时,我收到权限被拒绝的错误。
拒绝用户“xxxxxx”@“%”访问数据库“xxxxxxx”
我尝试了几个不同的客户端,结果是一样的。我还检查了服务器日志,没有其他详细信息,只有以下内容:
110816 10:23:15 543 连接[电子邮件保护]在 xxxxxxxx 543 Init DB 访问被拒绝,用户‘xxxxx’@‘%’ 对数据库‘xxxxxxx’”
如果我授予相关架构上的 SELECT 权限,我就可以正常连接。我是否误解了权限系统的工作方式,还是它应该像我想象的那样工作?
答案1
如果您使用手动插入 mysql.user 添加用户,则需要先运行,flush privileges
然后才能使用该用户登录。如果您使用GRANT
创建用户,则刷新将自动完成。
以下是插入示例:
INSERT INTO mysql.user (user, host, password)
VALUES ('user', 'localhost', password('yourpassword'));
答案2
错误消息告诉您需要知道的信息:无法访问数据库。如果不访问封闭数据库,则无法访问表,因此请向后者授予适当的权限。这有点像被授予对服务器上文件的访问权限,但被拒绝访问服务器本身。