MySQL权
限系统
1)
设置口令
设置
MySQL
用户口令的方法有多种:
–
CREATE USER…IDENTIFIED BY
–
GRANT…IDENTIFIED BY
–
SET PASSWORD
–
mysqladmin password
–
UPDATE
授权表(不推荐)
为所有用户帐户分配唯一的强口令。
?
避免可以轻易猜测到的口令。
?
使用以下
SELECT
语句可列出没有口令的所有帐户:
SELECT Host, User FROM mysql.user
WHERE Password = '';
?
确定重复口令:
SELECT User FROM mysql.user GROUP BY
password
HAVING count(user)>1;
?
让口令失效:
ALTER USER jim@localhost PASSWORD EXPIRE;
2)
Mysql
支持的权限
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3)
允许的主机名格式示例
?
主机名:
localhost
?
合格的主机名:
'hostname.example.com'
?
IP
编号:
192.168.9.78
?
IP
地址:
10.0.0.0/255.255.255.0
?
模式或通配符:
%
或
_
用户名和主机名示例:
?
john@10.20.30.40
?
john@'10.20.30.%'
?
john@'%.ourdomain.com'
?
john@'10.20.30.0/255.255.255.0'
4)
GRANT
语句
?
GRANT
语句可创建新帐户或者修改现有帐户。
?
GRANT
语法:
GRANT SELECT ON world_innodb.* TO
'kari'@'localhost' IDENTIFIED BY 'Abc123';
?
该语句的子句:
–
要授予的权限
–
权限级别:
—
全局:
*.*
—
数据库:
.*
—
表:
.
—
存储例程:
.
–
要授予其权限的帐户
–
可选口令
5)
权限级别
/
表内容和权限
user
针对服务器已知的每个帐户包含一个记录
db
特定于数据库的权限
tables_priv
特定于表的权限
columns_priv
特定于列的权限
procs_priv
存储过程和函数权限
6)
撤消帐户权限
?
使用
REVOKE
语句可以撤消特定的
SQL
语句权限:
REVOKE DELETE, INSERT, UPDATE ON
world_innodb.*
FROM 'Amon'@'localhost';
?
撤消权限以便将权限授予其他用户:
REVOKE GRANT OPTION ON world_innodb.*
FROM 'Jan'@'localhost';
?
撤消所有权限(包括向他人授权):
REVOKE ALL PRIVILEGES,
GRANT OPTION
FROM 'Sasha'@'localhost';
?
在发出
REVOKE
之前使用
SHOW GRANTS
语句确定要
撤消的权限,随后再次确认结果。
7)
禁用客户机访问控制
要指示服务器不读取授权表并禁用访问控制,可使用
–skip-grant-tables
选项。
?
每个连接都成功:
–
可以提供任何用户名及任何口令,并且可以从任何主机连接。
–
该选项将禁用整个权限系统。
–
连接的用户实际上拥有所有权限。
?
阻止客户机连接:
–
使用
–skip-networking
选项可阻止网络访问,并且仅允许在本地套接字、命名管道或共享内存上访问。
–
使用
–socket
选项可在非标准套接字上启动服务器以防止本地应用程序或用户随便访问。
8)
资源限制
通过将全局变量
MAX_USER_CONNECTIONS
设置为非
零值,限制使用服务器资源。
–
这将限制任何一个帐户的同时连接数量,但不会限制客
户机在连接后能执行的操作。
?
限制单个帐户的以下服务器资源:
–
MAX_QUERIES_PER_HOUR
:一个帐户每小时可发出的查询数量
–
MAX_UPDATES_PER_HOUR
:一个帐户每小时可发出的更新数量
–
MAX_CONNECTIONS_PER_HOUR
:一个帐户每小时可连接到服务器的次数
–
MAX_USER_CONNECTIONS
:允许的同时连接数量