MySQL显示拨款用于。。。与mysql.db和information_schema.schema_权限不同
我发现了不同的表演补助金user@host以及mysql.db表。为什么会这样 我如何解决这个问题?我们担心安全问题 我对mysql.users中的用户进行了一次演示。在mysql.users中,用户是user@xxx.xxx.xxx.xx当我运行show grants时,它会显示GRANT USAGE TOuser@xxx.xxx.xxx.xx 这让我很担心,因为这个用户似乎也能够访问数据库 当我查看mysql.db和information_schema.schema_特权时,我可以看到与主机为xxx.xxx.%的用户相同的用户,并且可以完全访问该数据库 有什么好处 编辑-更深入的解释: 以下是我所拥有的:MySQL显示拨款用于。。。与mysql.db和information_schema.schema_权限不同,mysql,mysql-management,mysql5,mysql-5.0,Mysql,Mysql Management,Mysql5,Mysql 5.0,我发现了不同的表演补助金user@host以及mysql.db表。为什么会这样 我如何解决这个问题?我们担心安全问题 我对mysql.users中的用户进行了一次演示。在mysql.users中,用户是user@xxx.xxx.xxx.xx当我运行show grants时,它会显示GRANT USAGE TOuser@xxx.xxx.xxx.xx 这让我很担心,因为这个用户似乎也能够访问数据库 当我查看mysql.db和information_schema.schema_特权时,我可以看到与主机
show grants for 'myuser'@'xxx.xxx.xxx.xxx';
它返回:
GRANT USAGE ON *.* TO 'myuser'@'xxx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD 'xxxxxxxxxxxxxxxxx'
如果我跑步:
select host,db,user from mysql.db where user='myuser';
我得到:
+----------+------------+------------+
| host | db | user |
+----------+------------+------------+
|xxx.xxx.% | somedb | myuser |
+----------+------------+------------+
别担心
mysql.user
表减轻了对所有数据库的特定全局权限
如果用户仅限于特定数据库,则在mysql.db表中只能看到特定于数据库的授权。受限于数据库的用户不需要超级权限、进程权限、关机权限和类似的权限
如果您创建了一个具有全局权限的用户(从而将该用户登录到mysql.user
),则不能仅为了将该用户降级到特定数据库而撤销全局权限。如果尝试使用REVOKE命令执行此操作,您将在mysql.user
中看到所有列上都有原始Y值的用户,在mysql.db
中看到相同的用户,在数据库特定权限上有Y值
您必须完全删除该用户,并创建具有较低权限的用户fresh
下面是一个基于注释的示例
mysql> show grants for advdb@'%';
+-----------------------------------------------------------------------------+
| Grants for advdb@% |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'advdb'@'%' IDENTIFIED BY PASSWORD '................' |
| GRANT ALL PRIVILEGES ON `advertpro`.* TO 'advdb'@'%' |
+-----------------------------------------------------------------------------+
授权使用只允许您知道身份验证涉及的MD5密码(如果密码不是空的话)。请注意,advdb可以从任何IP地址登录,并且只能访问AdverPro数据库 用户不需要特权,除非您希望用户查看processlist中的所有进程,甚至是属于其他进程的进程 用户不需要特权,除非您希望用户写入只读mysql实例、启动和停止复制、zap二进制日志等 用户不需要特权,除非您希望用户从操作系统命令行用户mysqladmin客户端程序关闭mysql 要复制你要找的priv
显示“用户”的授权@'xxx.xxx.xxx.%代码>
- 将输出复制到文本文件
- 将主机编辑为xxx.xxx.xxx.xx
- 添加分号
- 将其粘贴到其他服务器
UPDATE mysql.db
SET host='xxx.xxx.xxx.xxx'
WHERE user='myuser'
AND host='xxx.xxx.%'
AND db='somedb';
FLUSH PRIVILEGES;
这应该是它
要在SQL中转储MySQL授权,可以执行pt show Grants
使用端口连接mysql授权要好得多
以下是我个人对pt show grants的模仿
mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
mysql-hhostaddr-umyuserid-pmypassword-跳过列名-A-e“从mysql.user WHERE user''中选择CONCAT('SHOW GRANTS FOR'',user','@'',host',';')),mysql-hhostaddr-umyuserid-pmypassword-跳过列名-A|sed's/$/g'>MySQLUserGrants.sql
是的,但我的问题是,“显示授权”仅显示“授权使用时间”这并不是说用户拥有对数据库的所有权限。*这对于仅限于特定数据库的用户来说是正确的。您应该看到两行:一行来自GRANT USAGE,一行用于DB Private GRANT USAGE。GRANT USAGE只允许您知道身份验证涉及的MD5密码(如果密码不是空的话)。谢谢。我意识到这一点。我的观点是它没有第二行。使用行中的主机与mysql.db和信息模式中列出的主机不同。没有其他具有此名称的用户。