MySQL权限管理

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值