MySQL权限系统
1 登陆到MySQL
首先进入到机器的命令行界面并输入以下命令:
mysql -h hostname -u username -p
-h命令用于指定所希望连接的主机,即允许MySQL服务器的机器。如果是本机,可省略该命令和hostname参数。
-u命令用于指定连接数据库时使用的用户的名称。默认值是登录该操作系统的用户名。
-p命令指定连接密码。
2 创建数据库
创建数据库
在MySQL命令提示符下,输入如下命令:
mysql> create database dbname;
用所希望的数据库名代替“dbname”。
3 MySQL权限系统
3.1 最少权限原则
一个用户或一个进程应该拥有能够执行分配给他的任务的最低级别的权限。
3.2 GRANT命令
GRANT和REVOKE命令分别用来授予和取消MySQL用户的权限。这些权限分4个级别,分别是:
- 全局
- 数据库
- 表
- 列
GRANT命令可以用来创建用户并赋予权限。GRANT命令常见形式:
GRANT privileges [columns]
ON item
TO user_name [IDENTIFIED BY 'password']
[REQUIRE ssl_options]
[WITH [GRANT OPTION | LIMIT OPTION]]
方括号内的句子是可选的。
- privileges是由逗号分开的一组权限。
- columns是可选的。可以用它对每一个列指定权限(多列名称逗号隔开)。
- item是所应用于的数据库或表。将其指定我*.*,而将权限应用于所有的数据库,这叫做赋予全局权限。也可以通过*完成赋予全局权限。也可以以dbname.*的形式指定数据库中所有的表,以dbname.tablename的形式指定单个表。或者通过tablename来指定特定的列。
- REQUIRE子句指定用户是否必须通过加密套接字连接,或者其他SSL选项。
- WITH GRANT OPTION表示允许指定的用户向别人授予自己所拥有的权限。也可以使用如下的WITH子句:
MAX_QUERIES_PER_HOUR n
或者
MAX_UPDATES_PER_HOUR n
或者
MAX_CONNECTIONS_PER_HOUR n
这些句子可以指定每一个用户每小时进行的查询、更新和连接的数量。 -
3.3 REVOKE命令
REVOKE命令用来从一个用户收回权限,语法上与GRANT相似:
REVOKE privileges [columns] ON item FROM user_name
如果已经给出WITH GRANT OPTION子句,可以这样撤销它:
REVOKE ALL PRIVILEGES, GRANT FROM user_name
3.4 权限的类型和级别
MySQL中存在3种基本类型的权限:一般用户的权限、管理员的权限和几个特定的权限。
我们应该只赋予用户访问他们必须使用的数据库和表的权限,而不应该将访问mysql的权限赋予不是管理员的用户。一般用户的权限
权限 应用于 描述 SELECT 表,列 允许用户从表种选择行(记录) INSERT 表,列 允许用户在表中插入新行 UPDATE 表,列 允许用户修改存表里行中的值 DELETE 表 允许用户删除现存表的行 INDEX 表 允许用户创建和拖动特定表索引 ALTER 表 允许用户修改现存表的结构,例如,可添加列、重命名列或表、修改列的数据类型 CREATE 数据库,表 允许用户创建新的数据库和表。如果在GRANT中指定了一个特定的数据库或表,他们只能创建该数据库或表,即他们首先必须删除(drop)它 DROP 数据库,表 允许用户拖动(删除)数据库或表
管理员的权限权限 描述 CREATE TEMPORARY TABLES 允许管理员在CREATE TABLE语句中使用TEMPORARY关键字 FILE 允许将数据从文件读入表,或从表读入文件 LOCK TABLES 允许使用LOCK TABLES语句 PROCESS 允许管理员查看属于所有用户的服务器进程 RELOAD 允许管理员重新载入授权表、清空授权、主机、日志和表格 REPLICATION CLIENT 允许在复制主机(Master)和从机(Slave)上使用SHOW STATUS REPLICATION SLAVE 允许复制从服务器连接到主服务器 SHOW DATABASES 允许查看所有的数据库和表,如果没有这个权限,只能查看所能看到的数据库和表 SHUTDOWN 允许管理员关闭服务器 SUPER 允许管理员关闭属于任何用户的线程
特别的权限权限 描述 ALL 授予上述两个表中的所有权限,也可以写出ALL PRIVILEGES USAGE 不授予权限。通常在之后授予相关权限 3.5 使用GRANT和REVOKE的示例
要创建一个管理员,可以输入:
GRANT ALL ON * TO tom IDENTIFIED BY 'tom123' WITH GRANT OPTION;
以上命令授予用户名为tom、密码为tom123的用户使用所有数据库的所有权限,并允许他向其他人授予这些权限。
可以这样撤销他的权限:
REVOKE ALL PRIVILEGES, GRANT FROM tom;
现在,可以创建一个没有任何权限的新用户:
GRANT USAGE ON books.* TO tom IDENTIFIED BY 'tom123';
之后呢,我们又想给tom一些权限,可以这样:
GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP ON books.* TO tom;
这时候就不需要指定tom的密码了。
我们也可以减少tom的一些权限:REVOKE alter, create, drop on books.* FROM tom;
当他不再需要使用数据库时,可以这样撤销他所有的权限:
REVOKE ALL on books.* FROM tom;