1. 创建用户
可以用两种方式创建MySQL账户:
- CREATE USER and GRANT
- 直接操作MySQL授权表
首选方法是使用帐户管理语句。因为这样更简洁,比直接操作MySQL授权表错误少。
- 创建用户 CREATE USER
CREATE USER语法:CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
create user 用户名 IDENTIFIED BY '密码'; //默认% 可以从其他主机访问,但不能从本地访问
create user '用户名'@'%' IDENTIFIED BY '密码'; //和上一句一样
create user '用户名'@'localhost' IDENTIFIED BY '密码'; //只能主机访问
- 创建用户并设置权限
以root连接到服务器上后,可以添加新账户。下面的语句使用GRANT来设置四个新账户:
下面的示例使用CREATE USER和GRANT语句来设置四个帐户:
mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost'
-> WITH GRANT OPTION;
mysql> CREATE USER 'finley'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'%'
-> WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';
其中两个账户有相同的用户名finley和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户
('finley'@'localhost')
只用于从本机连接时。另一个账户('finley'@'%')
主机部分使用'%'
通配符, 所以它可用于从其它主机连接。请注意finley的两个账户必须能从任何主机以finley连接。没有localhost账户,当finley从本机连接时,mysql_install_db
创建的localhost的匿名用户账户将占先。结果是,finley将被视为匿名用户。原因是匿名用户账户的Host列值比('finley'@'%')
账户更具体,这样在user表排序顺序中排在前面。一个账户有用户名admin,没有密码。该账户只用于从本机连接。授予了RELOAD和PROCESS管理权限。这些权限允许admin用户执行
mysqladmin reload
、mysqladmin refresh
和mysqladmin flush-xxx
命令,以及mysqladmin processlist
。未授予访问数据库的权限。你可以通过GRANT语句添加此类权限。- 用户dummy,没有密码(不安全,不推荐)。该账户只用于从本机连接。未授予权限。假定你将在以后将具体权限授予该账户。
下一个示例创建三个帐户,并授予它们访问特定数据库的权限。他们都具有用户名custom和密码obscure:
mysql> CREATE USER 'custom'@'localhost' IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO 'custom'@'localhost';
mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO 'custom'@'host47.example.com';
mysql> CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO 'custom'@'%.example.com';
- 第一个帐户可以访问
bankaccount
数据库,但是只能从本地主机。 - 第二个帐户可以访问
expenses
数据库,但只能从host47.example.com
。 - 第三帐户可以访问
customer
数据库,从example.com
域的任何主机。因为使用了'%'
通配符,所以此帐户可以从域中的所有机器访问
2. 查看用户权限
mysql> SHOW GRANTS FOR 'admin'@'localhost';
3. 删除用户
mysql> DROP USER 'jeffrey'@'localhost';
4. 修改密码
root 修改其他用户
mysql> SET PASSWORD FOR
-> 'jeffrey'@'localhost' = PASSWORD('mypass');
修改自己的密码
mysql> SET PASSWORD = PASSWORD('mypass');
你还可以在全局级别使用GRANT USAGE语句(ON *.*
)来指定某个账户的密码而不影响账户当前的权限:
mysql> GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
更改帐户密码从命令行使用mysqladmin命令
shell> mysqladmin -u user_name -h host_name password "new_password"