[英]in mysql, weird results when dropping / adding users
具有一个安全例程,该例程由一系列用户名,密码和权限组成
// $users - Array of user records // $tables - list of tables from `show tables` // create users as necessary, reset password foreach( $users as $user=>$arr ) { mysql_query( "drop user {$arr['user']}" ); mysql_query( "create user {$arr['user']} identified by '{$arr['pwd']}'" ); }; // for each user set permission foreach( $users as $user=>$arr ) { if( @$arr['table_grant'] ) foreach( $tables as $table ) mysql_query( "grant {$arr['table_grant']} on $table to {$arr['user']}" ); if( @$arr['tables_revoke'] ) foreach( $arr['tables_revoke'] as $table ) mysql_query( "revoke {$arr['table_grant']} on $table from {$arr['user']}" ); if( @$arr['procedures_grant'] ) foreach( $arr['procedures_grant'] as $proc mysql_query( "grant execute on procedure $proc to {$arr['user']}" ); if( @$arr['functions_grant'] ) foreach( $arr['functions_grant'] as $func ) mysql_query( "grant execute on function $func to {$arr['user']}" ); }
如果没有用户,则可以正常工作。
如果用户已经存在,则该用户在那里,但是除了最后一个创建的用户之外, 没有其他所有用户的密码 。
mysql> select user, password from mysql.user where user like 'm%'; +------------+-------------------------------------------+ | user | password | +------------+-------------------------------------------+ | massage150 | *21A196706D99436A1C8163A98AE0687C432C37E2 | | mlogin | *DE069F0ED7E311D173CB01C3DD136D282E66048D | | mselect | | | mdml | | +------------+-------------------------------------------+ 4 rows in set (0.00 sec)
使用用户和权限时,是否需要在MySQL
运行某种sync
过程? 我需要删除它们,等待几秒钟,然后重新创建吗? 要不然是啥?
(代码在postgreSQL和Oracle中运行良好。针对MySQL的GRANT和REVOKE的局限性进行了一些修改,即GRANT是逐表(而不是SCHEMA范围)进行的,因此随后发布的REVOKE可以正常工作。)
为用户设置GRANTs和REVOKEs后,再通过一次用户SET PASSWORD
。 丑陋,但是行得通。
仍在寻找对正在发生的事情的更好的理解。
按照下面的答案(谢谢!),MySQL有一个非ANSI命令FLUSH PRIVILEGES。 在DROP USER之后,CREATE USER和MySQL之前发出,不再发出用户密码。
尝试在CREATE USER语句之后执行FLUSH PRIVILEGES。 根据文档:
由于GRANT和CREATE USER语句,服务器将信息缓存在内存中。 相应的REVOKE和DROP USER语句不会释放该内存,因此对于执行许多导致缓存的语句实例的服务器,将会增加内存使用量。 可以使用FLUSH PRIVILEGES释放此缓存的内存。
值得一试。 我注意到对users表的更新在不运行此命令的情况下不会直接生效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.