MySQL用户管理

Posted neeo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL用户管理相关的知识,希望对你有一定的参考价值。

基于mysql5.7.21版本


题外话:有些命令如果不能用的话,请参考版本对应的官方文档, 因为,有些命令格式,在慢慢废弃(如:IDENTIFIED BY PASSWORD ),或者不推荐(如:PASSWORD()函数,从MySQL 5.7.6开始不推荐),所以,网上的博客写的可能没错,只是可能跟你的mysql版本不匹配

1. CREATE USER 

-- 创建账户的一般格式如下,主机名部分(如果省略)默认为 % 
	CREATE USER ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘password‘;
-- 创建一个使用默认身份验证插件和给定密码的帐户。将密码标记为已过期,以便用户必须在第一次连接到服务器时选择一个新密码
	CREATE USER ‘jeffrey‘@‘localhost‘ 
		IDENTIFIED BY ‘new_password‘ PASSWORD EXPIRE;
-- 创建一个使用sha256_password身份验证插件和给定密码的帐户 。要求每180天选择一个新密码:
	CREATE USER ‘jeffrey‘@‘localhost‘
		IDENTIFIED WITH sha256_password BY ‘new_password‘
		PASSWORD EXPIRE INTERVAL 180 DAY;
-- 创建多个账户,并指定每个账户的权限和和属性:
	CREATE USER
		‘jeffrey‘@‘localhost‘ IDENTIFIED WITH mysql_native_password
		                               BY ‘new_password1‘,
		‘jeanne‘@‘localhost‘ IDENTIFIED WITH sha256_password
		                              BY ‘new_password2‘
		REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 60
		ACCOUNT LOCK;
-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/create-user.html

2. ALTER USER

-- 更改账户的密码并使其过期,因此,用户必须使用指定的密码进行连接,并在下一个连接选择一个新密码:
	ALTER USER ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘new_password‘ PASSWORD EXPIRE;
-- 修改一个账户以使用sha256_password验证插件和给定的密码。要求每180天选择一个新密码:
	ALTER USER ‘jeffrey‘@‘localhost‘ IDENTIFIED WITH sha256_password BY ‘new_password‘ PASSWORD 	EXPIRE INTERVAL 180 DAY;
-- 锁定或者解锁账户
	ALTER USER ‘jeffrey‘@‘localhost‘ ACCOUNT LOCK;
	ALTER USER ‘jeffrey‘@‘localhost‘ ACCOUNT UNLOCK;

-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

3. DROP USER

-- 删除账户一般格式如下,主机部分(如果省略)默认为: &
	DROP USER ‘jeffrey‘@‘localhost‘;
	注意:如果尝试删除不存在的账户,则会发生错误。
-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/drop-user.html

4. GRANT

-- 一般格式授权如下,主机部分(如果省略)默认为: &
	GRANT ALL ON db1.* ‘jeffrey‘@‘localhost‘;
-- 通常情况下,数据库管理员首先使用 CREATE USER创建帐户并定义其非特权特征,例如其密码,是否使用安全连接,限制对服务器资源的访问,然后用于 GRANT定义其特权。 ALTER USER可能被用来改变现有账户的非特权特征。例如:
	CREATE USER ‘jeffrey‘@‘localhost‘ IDENTIFIED BY ‘password‘;		-- 创建用户
	GRANT ALL ON db1.* TO ‘jeffrey‘@‘localhost‘;	-- 赋予db1下所有表权限
	GRANT SELECT ON db2.invoice TO ‘jeffrey‘@‘localhost‘;	-- 赋予db2.invoice表查权限
	ALTER USER ‘jeffrey‘@‘localhost‘ WITH MAX_QUERIES_PER_HOUR 90;	-- 更改此用户最大连接时间为90小时

-- MySQL不支持用户名中的通配符。要引用匿名用户,请使用以下GRANT语句指定具有空用户名的帐户 :
	GRANT ALL ON test.* TO ‘‘@‘localhost‘ ...;
	注意:在这种情况下,任何使用匿名用户的正确密码从本地主机连接的用户都将被允许访问,且具有与匿名用户帐户相关的权限。
-- 查询列出所有的匿名用户:
	SELECT Host, User FROM mysql.user WHERE User=‘‘;
-- 删除本地匿名用户账户:
	DROP USER ‘‘@‘localhost‘;
-- 全局特权,全局特权是管理的或适用于给定服务器上的所有数据库。要分配全局特权,请使用以下 ON *.*语法:
	GRANT ALL ON *.* TO ‘someuser‘@‘somehost‘;
	GRANT SELECT, INSERT ON *.* TO ‘someuser‘@‘somehost‘;
	MySQL将全局权限存储在 mysql.user系统表中。
-- 数据库权限,数据库特权适用于给定数据库中的所有对象。要分配数据库级别的权限,请使用语法: ON db_name.*
	GRANT ALL ON mydb.* TO ‘someuser‘@‘somehost‘;
	GRANT SELECT, INSERT ON mydb.* TO ‘someuser‘@‘somehost‘;
	注意:如果使用ON *语法(而不是 ON *.*),则会在数据库级别为默认数据库分配权限。如果没有默认数据库,则会发生错误。	
	MySQL将数据库权限存储在 mysql.db系统表中。
-- 表特权,表权限适用于给定表中的所有列。要分配表级权限,请使用语法: ON db_name.tbl_name
	RANT ALL ON mydb.mytbl TO ‘someuser‘@‘somehost‘;
	GRANT SELECT, INSERT ON mydb.mytbl TO ‘someuser‘@‘somehost‘;
	MySQL在表中存储表特权 mysql.tables_priv。
-- 列权限,列权限适用于给定表中的单个列。在列级别授予的每个特权必须紧跟在括号内的一列或多列之后。
	GRANT SELECT (col1), INSERT (col1, col2) ON mydb.mytbl TO ‘someuser‘@‘somehost‘;
	MySQL将列权限存储在 mysql.columns_priv系统表中。
-- 存储的例程权限,在ALTER ROUTINE, CREATE ROUTINE, EXECUTE,和 GRANT OPTION权限适用于存储例程(过程和函数)。他们可以在全球和数据库级授予。除此之外 CREATE ROUTINE,这些特权可以在例程级授予各个例程。	
	GRANT CREATE ROUTINE ON mydb.* TO ‘someuser‘@‘somehost‘;
	GRANT EXECUTE ON PROCEDURE mydb.myproc TO ‘someuser‘@‘somehost‘;
	MySQL在mysql.procs_priv系统表中存储例程级特权 。

-- 代理用户权限,该PROXY特权使一个用户成为另一个用户的代理。代理用户模拟或获取代理用户的身份; 也就是说,它假定代理用户的特权。
	GRANT PROXY ON ‘localuser‘@‘localhost‘ TO ‘externaluser‘@‘somehost‘;
	MySQL在mysql.proxies_priv系统表中存储代理权限 。
-- 要授予GRANT OPTION 帐户权限而不另外更改其权限,请执行以下操作:
	GRANT USAGE ON *.* TO ‘someuser‘@‘somehost‘ WITH GRANT OPTION;
-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/grant.html

5. RENAME USER

-- 一般格式,主机名部分(如果省略)默认为 ‘%‘
	RENAME USER old_user TO new_user;
	RENAME USER ‘jeffrey‘@‘localhost‘ TO ‘jeff‘@‘127.0.0.1‘;
-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/rename-user.html

6. REVOKE

-- 撤销权限,该REVOKE声明使系统管理员可以撤消MySQL帐户的权限。主机名部分(如果省略)默认为 ‘%‘。
	REVOKE INSERT ON *.* FROM ‘jeffrey‘@‘localhost‘;
-- 要撤销所有权限,请使用第二种语法,该语法会删除指定用户或用户的所有全局,数据库,表,列和例程权限:
	REVOKE ALL PRIVILEGES, GRANT OPTION FROM user;
-- 注意:要使用此REVOKE语法,您必须具有全局CREATE USER 特权或数据库的UPDATE 特权mysql。
必须从中撤销权限的用户帐户必须存在。
REVOKE删除权限,但不会删除mysql.user表项。要完全删除用户帐户,请使用DROP USER

-- 摘自:https://dev.mysql.com/doc/refman/5.7/en/revoke.html

7. SET PASSWORD

-- SET PASSWORD可以使用或不使用FOR明确命名用户帐户的子句:
-- 使用子句,该语句设置指定帐户的密码,该密码必须存在: FOR user
	SET PASSWORD FOR ‘jeffrey‘@‘localhost‘ = ‘auth_string‘;
-- 在没有子句的情况下,该语句为当前用户设置密码: FOR user
	SET PASSWORD = ‘auth_string‘;

 


摘自:

  https://dev.mysql.com/doc/    -- 5.7官方文档


End

以上是关于MySQL用户管理的主要内容,如果未能解决你的问题,请参考以下文章

在每个用户的Rails中使用片段缓存

SnippetsLab for Mac 1.9 中文共享版 – 强大的代码收藏管理工具

片段 XXX 未与片段管理器关联

使用 Git 来管理 Xcode 中的代码片段

部分代码片段

linux中怎么查看mysql数据库版本