1、首先创建用户username以及密码passwd,授权主机localhost。
1 create user ‘username’@'localhost' identified by 'passwd'
创建了用户后,如果不对用户进行授权的话,则此用户只是对test库具有所有的权限,对于其他的所有库都没有权限。
此时这个用户的状态应该是这样的:
1 +--------------------------------------------------------------------------------------------------------------+ 2 | Grants for zekai@localhost | 3 +--------------------------------------------------------------------------------------------------------------+ 4 | GRANT USAGE ON *.* TO 'zekai'@'localhost' IDENTIFIED BY PASSWORD '*6BD4D64E6EE7284ED2F9D694BC77D95AF26DD197' | 5 +--------------------------------------------------------------------------------------------------------------+
那如果要对这个用户进行授权,可以使用下面的第二步:
2、然后授权localhost主机通过用户username管理dbname数据库下面的所有权限。
1、无需密码:
grant all privileges on dbname.* to 'username'@'localhost'
2、需要密码:
grant all privileges on dbname.* to 'username'@'localhost' identified by ‘password’
最后在数据库中用户名的状态:
1 +-----------------------------------------------------------------------------------------------------------------------+ 2 | Grants for zekai@localhost | 3 +-----------------------------------------------------------------------------------------------------------------------+ 4 | GRANT ALL PRIVILEGES ON *.* TO 'zekai'@'localhost' IDENTIFIED BY PASSWORD '*6BD4D64E6EE7284ED2F9D694BC77D95AF26DD197' | 5 +-----------------------------------------------------------------------------------------------------------------------+
所有的操作完成之后,不要忘记下面的语句,这样才能最终生效:
1 flush privileges
以上的记录是对某个用户的某个主机进行所有的授权,但是我们可以更加的颗粒化的去限制某个用户的权限。
怎样授权一个用户远程的连接一台主机的数据库:
根据grant的语法,localhost可以使用域名,IP地址或者IP端来进行替代,因此可以使用如下的方法来进行授权:
a.使用百分号授权
1 grant all on *.* to test@'10.0.0.%' identified by '123test';
b.子网掩码配置法:
1 grant all on *.* to test@'10.0.0.0/255.255.255.0' identified by 'test123'
c.对特定的IP进行授权:
1 grant all on *.* to test@'10.0.0.5' identified by 'test123'
我们在授权的时候尽可能的给最小的权限,而不是一味的授权“all on”
一个mysql官方的例子:
1 CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; 2 GRANT ALL ON db1.* TO 'jeffrey'@'localhost'; 3 GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost'; 4 GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
可以在mysql的命令行界面使用help grant来进行查看。
怎样将权限进行回收?
使用的是revoke对某个用户的权限进行回收,例子:
1 REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
特别需要注意的是,revoke之后的*.*这个必须要和之前grant的*.*要匹配上,不然的话不可能回收权限。
回收之后,用户的权限:
1 GRANT SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'zekai'@'localhost' IDENTIFIED BY PASSWORD '*6BD4D64E6EE7284ED2F9D694BC77D95AF26DD197'