Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL显示拨款用于。。。与mysql.db和information_schema.schema_权限不同_Mysql_Mysql Management_Mysql5_Mysql 5.0 - Fatal编程技术网

MySQL显示拨款用于。。。与mysql.db和information_schema.schema_权限不同

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_特权时,我可以看到与主机

我发现了不同的表演补助金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.%的用户相同的用户,并且可以完全访问该数据库

有什么好处

编辑-更深入的解释:

以下是我所拥有的:

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和信息模式中列出的主机不同。没有其他具有此名称的用户。