MySQL 用户权限管理
时间:2010-10-26 来源:haiquan517
一. 用户权限管理
1. 匿名帐号指定密码
①.Mysql –u root
SET PASSWORD FOR ‘’@’localhost’= PASSWORD(‘newpwd’);
②.Mysql –u root
UPDATE mysql.user SET Password= PASSWORD(‘newpwd’) where user=’’;
Flush privileges;
2. 删除匿名帐户
①.Mysql –u root
Delete from mysql.user where user=’’;
Flush privileges;
②.Mysql> drop user ‘’@’localhost’;
3. Root帐号指定密码
①.Mysql –u root
Set password for ‘root’@’localhost’=password(‘newpwd’);
②.Mysqladmin –u root password “newpwd”
③.Mysql –u root
Update mysql.user set password=password(‘newpwd’) where user= ‘root’;
Flush privileges;
4. Mysql 授权表说明:
· user表范围列决定是否允许或拒绝到来的连接。对于允许的连接,user表授予的权限指出用户的全局(超级用户)权限。这些权限适用于服务器上的all数据库。
· db表范围列决定用户能从哪个主机存取哪个数据库。权限列决定允许哪个操作。授予的数据库级别的权限适用于数据库和它的表。
· 当你想要一个给定的db表行应用于若干主机时,db和host表一起使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表行的Host值设为空值,然后将那些主机的每一个移入host表。这个机制详细描述在。
注释:host表不受GRANT和REVOKE语句的影响。大多数MySQL安装根本不需要使用该表。
· tables_priv和columns_priv表类似于db表,但是更精致:它们在表和列级应用而非在数据库级。授予表级别的权限适用于表和所有它的列。授予列级别的权限只适用于专用列。
· procs_priv表适用于保存的程序。授予程序级别的权限只适用于单个程序。
5. 查看用户权限命令:show grants
检查Host和User值分别为pc84.example.com和bob的账户所授予的权限:
Show grants for ‘bob’@’pc84.example.com’;
6. 进行权限分配时,将按照user-db-tables_priv-columns_priv的顺序进行权限分配。
7. 要想找出服务器用来鉴定你的账户,使用CURRENT_USER()函数:
Select CURRENT_USER()
8. 使用Grant 创建新帐号:
· Grant all privileges on *.* to ‘monty’@’localhost’ identified by ‘some_pass’ with grant option;
新建一个monty帐号,密码为some_pass,并且只允许从本地连接,具有完全权限
· Grant all privileges on *.* to ‘monty’@’%’ identified by ‘some_pass’ with grant option;
新建一个monty帐号,密码为some_pass,并且允许从任何机器连接,具有完全权限
· Grant reload process on *.* to ‘admin’@’localhost’;
一个账户有用户名admin,没有密码。该账户只用于从本机连接。授予了RELOAD和PROCESS管理权限
· Grant usage on *.* to ‘dummy’@’localhost’;
一个账户有用户名dummy,没有密码。该账户只用于从本机连接。未授予权限
9. 创建3个帐户,允许它们访问专用数据库。每个帐户的用户名为custom,密码为obscure
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO 'custom'@'localhost'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO 'custom'@'whitehouse.gov'
-> IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO 'custom'@'server.domain'
-> IDENTIFIED BY 'obscure';
这3个账户可以用于:
· 第1个账户可以访问bankaccount数据库,但只能从本机访问。
· 第2个账户可以访问expenses数据库,但只能从主机whitehouse.gov访问。
· 第3个账户可以访问customer数据库,但只能从主机server.domain访问。
10. 限制帐户资源
①.例如,要想只以限制方式创建可以访问customer数据库的新账户,执行该语句:
Mysql> grant all on customer.* to ‘chen’@’localhost’
-> identified by ‘password’
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2;
②.要想设置或更改已有账户的限制,在全局级别使用GRANT USAGE语句(在*.*)。下面的语句可以将francis的查询限制更改为100:
mysql> GRANT USAGE ON *.* TO 'chen'@'localhost'
-> WITH MAX_QUERIES_PER_HOUR 100;
③.要想取消已有限制,将该值设置为零。例如,要想取消francis每小时可以连接的次数的限制,使用该语句:
mysql> GRANT USAGE ON *.* TO 'francis'@'localhost'
-> WITH MAX_CONNECTIONS_PER_HOUR 0;
11. 设置账户密码
①. 使用mysqladmin 命令指定:
Mysqladmin –u user_name –h host_name password “newpwd”
②.使用set password 语句指定:
Mysql> set password for ‘chen’@’%’ = PASSWORD(‘newpwd’);
③.使用grant usage语句指定,并且不影响账户当前的权限:
Mysql> grant usage on *.* to ‘chen’@’%’ identified by ‘newpwd’;
12.删除帐号权限:
Revoke select on chen.* from quan;
删除quan这个帐号select权限从chen数据库