要授予用户帐户权限,可以用GRANT
命令。有撤销用户的权限,可以用REVOKE
命令。这里以 MySQl 为例,介绍权限控制实际应用。
GRANT
授予权限语法:
GRANT privilege,[privilege],.. ON privilege_level
TO user [IDENTIFIED BY password]
[REQUIRE tsl_option]
[WITH [GRANT_OPTION | resource_option]];
简单解释一下:
GRANT
关键字后指定一个或多个权限。如果授予用户多个权限,则每个权限由逗号分隔。ON privilege_level
确定权限应用级别。MySQL 支持 global(*.*
),database(database.*
),table(database.table
)和列级别。如果使用列权限级别,则必须在每个权限之后指定一个或逗号分隔列的列表。user
是要授予权限的用户。如果用户已存在,则GRANT
语句将修改其权限。否则,GRANT
语句将创建一个新用户。可选子句IDENTIFIED BY
允许您为用户设置新的密码。REQUIRE tsl_option
指定用户是否必须通过 SSL,X059 等安全连接连接到数据库服务器。WITH GRANT OPTION
子句允许您授予其他用户或从其他用户中删除您拥有的权限。此外,您可以使用WITH
子句分配 MySQL 数据库服务器的资源,例如,设置用户每小时可以使用的连接数或语句数。这在 MySQL 共享托管等共享环境中非常有用。REVOKE
撤销权限语法:
REVOKE privilege_type [(column_list)]
[, priv_type [(column_list)]]...
ON [object_type] privilege_level
FROM user [, user]...
简单解释一下:
REVOKE
关键字后面指定要从用户撤消的权限列表。您需要用逗号分隔权限。ON
子句中撤销特权的特权级别。FROM
子句中的权限的用户帐户。GRANT
和 REVOKE
可在几个层次上控制访问权限:
GRANT ALL
和 REVOKE ALL
;ON database.*
;ON database.table
;新创建的账户没有任何权限。账户用 username@host
的形式定义,username@%
使用的是默认主机名。MySQL 的账户信息保存在 mysql 这个数据库中。
USE mysql;
SELECT user FROM user;
下表说明了可用于GRANT
和REVOKE
语句的所有允许权限:?
CREATE USER myuser IDENTIFIED BY 'mypassword';
UPDATE user SET user='newuser' WHERE user='myuser';
FLUSH PRIVILEGES;
-- 重命名 RENAME USER 原来名字 TO 新的名字
RENAME USER bing1 TO bing2
DROP USER myuser;
SHOW GRANTS FOR myuser;
GRANT SELECT, INSERT ON *.* TO myuser;
-- 用户授权ALL PRIVILEGES全部权限,库,表
-- ALL PRIVILEGES除了给别人授权,其他都能够干
GRANT ALL PRIVILEGES ON *.* TO myuser;
REVOKE SELECT, INSERT ON *.* FROM myuser;
SET PASSWORD FOR myuser = 'mypass';
?