MySQL权限管理

来源:互联网 发布:ie11启用javascript 编辑:程序博客网 时间:2024/06/09 14:30

1. 创建用户

可以用两种方式创建MySQL账户:

  1. CREATE USER and GRANT
  2. 直接操作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 reloadmysqladmin refreshmysqladmin 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"
原创粉丝点击