增加用户
增加用户方式一语法:
create user 用户名@主机名 //用户名区分大小写,主机名连接来自的主机;
[ identified by [password] ‘密码’] //密码区分大小写;
[ , 用户名@主机名[identified by [password] [‘密码’]] [ ,... ] //可以同时创建多个数据库用户,中间用逗号分隔。
例子
使用 CREATE USER 命令创建一个新的用户。假设用户名为 newuser,密码为 password。
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
注意这里的 ‘%’ 表示任何 IP 地址都可以连接到此用户。如果你想限制只有局域网内的 IP 可以访问,可以指定 ‘192.168.1.%’ 或者具体的 IP 地址,例如 ‘192.168.1.5’。
如果只允许本地登录
CREATE USER 'newuser'@localhost IDENTIFIED BY 'newuser';
修改用户名
rename user 老用户 to 新用户
使用 rename user 语句将用户 cat 名字更改为 tom。
rename user cat@localhost to tom@localhost;
修改用户密码
修改用户密码语法:
ALTER USER 'username'@'%' IDENTIFIED BY 'password';
使用 alter user语句将用户 tom 的密码改为 hello。
alter user 'tom'@'%' identified by 'hello';
删除用户
删除用户语法:
drop user 用户 [ , 用户] ....
删除tom
drop user 'tom'@'%';
权限
MySql系统库中的权限表
MySql 系统库中的权限表:
user:最重要的权限表,存储允许连接到服务器的账号。
db:存储用户对某个数据库的操作权限。
host:存储某个主机对数据库的操作权限。
tables_priv:对单个表进行权限设置。
columns_priv:对单个数据列进行权限设置。
columns_priv:对存储过程和存储函数进行权限设置。
访问控制的两个阶段:
1、连接核实阶段
用户试图连接 MySQL 服务器时,服务器基于用户提供的信息来验证用户身份。使用 MySQL 的 user 表进行身份核实
2、请求核实阶段
对当前用户的每个操作都进行权限检查,判断用户是否有足够的权限来执行它。
授予的权限等级:
全局层级:适用于一个给定服务器中所有的数据库。
数据库层级:适用于一个给定数据库中的所有目标。
表层级:适用于一个给定表中的所有列。
列层级:适用于一个给定表中的单一列。
子程序层级:适用于存储的子程序 ,可以被授权为全局层级和数据库层级。
MYSQL 权限类型
给予用户权限 GRANT
基本语法格式:
GRANT priv_type [(column_list)]
[, priv_type [(column_list)]] [, ...]
ON {tbl_name | * | *.* | db_name.* | db_name.tbl_name}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] [, ...]
[WITH GRANT OPTION]
各部分解释:
-
priv_type:指定了要授予的权限类型。例如
SELECT
,INSERT
,UPDATE
,DELETE
,CREATE
,DROP
,ALTER
,GRANT OPTION
等等。如果需要授予多个权限,可以在同一个GRANT
语句中列出多个priv_type
。 -
column_list:可选参数,用于指定权限适用于哪些列。如果省略,则对表中的所有列都有效。
-
tbl_name:表名,用于指定具体的表。
-
db_name:数据库名,用于指定具体的数据库。
-
user:要授予权限的用户。格式为
'username'[@'host']
。host
可以是具体的 IP 地址、域名或%
(代表任何主机)。 -
IDENTIFIED BY [PASSWORD] ‘password’:指定用户的密码。如果省略
PASSWORD
关键字,则密码以明文形式存储,这是不安全的做法。建议总是使用PASSWORD
关键字来加密密码。 -
WITH GRANT OPTION:可选参数,如果包含这个选项,则授予用户再次授权给其他用户的权限。
示例:
假设我们要授予用户 newuser
对 exampledb
数据库中的所有表具有 SELECT
和 INSERT
权限,并且该用户可以从任何地方登录,密码为 securepass
:
GRANT SELECT, INSERT ON exampledb.* TO 'newuser'@'%' IDENTIFIED BY 'securepass';
如果还要添加 WITH GRANT OPTION
:
GRANT SELECT, INSERT ON exampledb.* TO 'newuser'@'%' IDENTIFIED BY 'securepass' WITH GRANT OPTION;
这样,newuser
就能够再次授予其他用户 SELECT
和 INSERT
权限。请注意,WITH GRANT OPTION
应谨慎使用,因为它允许用户进一步传播权限。
示例:使用 grant 语句创建一个新用户 test1,密码为 test123,该用户对所有的数据又查询、插入的权限,并授予 grant 权限。
grant select,insert on *.* to test1@localhost identified by ‘test123’ with grant
REVOKE 撤销用户权限
REVOKE
语句用于撤销之前授予用户的权限。以下是 REVOKE
语句的基本语法格式:
REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] [, ...]
ON {tbl_name | * | *.* | db_name.* | db_name.tbl_name}
FROM user
[, user] [, ...]
各部分解释:
-
priv_type:要撤销的权限类型。例如
SELECT
,INSERT
,UPDATE
,DELETE
,CREATE
,DROP
,ALTER
,GRANT OPTION
等等。如果需要撤销多个权限,可以在同一个REVOKE
语句中列出多个priv_type
。 -
column_list:可选参数,用于指定权限适用于哪些列。如果省略,则对表中的所有列都有效。
-
tbl_name:表名,用于指定具体的表。
-
db_name:数据库名,用于指定具体的数据库。
-
user:要撤销权限的用户。格式为
'username'[@'host']
。host
可以是具体的 IP 地址、域名或%
(代表任何主机)。
示例:
假设我们之前授予了用户 newuser
对 exampledb
数据库中的所有表具有 SELECT
和 INSERT
权限,现在想要撤销这些权限:
REVOKE SELECT, INSERT ON exampledb.* FROM 'newuser'@'%';
如果要撤销所有权限:
REVOKE ALL PRIVILEGES, GRANT OPTION ON *.* FROM 'newuser'@'%';
这个命令会撤销用户 newuser
对所有数据库的所有权限,并且撤销其授予其他用户权限的能力。
注意事项:
- 撤销权限时,必须指定与授予时相同的权限级别。例如,如果你通过
ON *.*
授予了全局权限,那么你也必须通过ON *.*
来撤销这些权限。 - 如果没有明确指定权限级别,那么
REVOKE
语句将默认为最低级别的权限范围。 - 如果需要撤销特定用户的
GRANT OPTION
权限,需要显式地包括GRANT OPTION
在REVOKE
语句中。
通过使用 REVOKE
语句,你可以有效地管理和控制数据库用户的权限,从而保护数据的安全性和完整性。
查看权限
show grants for username@hostname