文章目录
- 用户管理
- 创建用户
- 更改密码
- mysql的权限分类
- 授权实例
- 撤销权力
- mysql检查顺序
- 相关文件信息
用户管理
创建用户
在MySQL中,创建用户是管理和授权数据库访问权限的重要操作。下面是创建用户的详细步骤:
-
连接到MySQL服务器:使用MySQL客户端工具(如MySQL命令行客户端或MySQL Workbench)连接到MySQL服务器。可以使用以下命令连接到本地服务器:
mysql -u root -p
这将提示您输入root用户的密码以登录MySQL服务器。
-
创建用户:在MySQL命令行或客户端中,使用以下命令创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
其中,'username’是要创建的用户名,‘host’是用户的主机限定符,可以是具体的主机名或使用通配符(如’%'表示所有主机),'password’是用户的密码。
例如,要创建一个名为’john’的用户,密码为’mypassword’,可以使用以下命令:
CREATE USER 'john'@'localhost' IDENTIFIED BY 'mypassword';
-
授予权限:创建用户后,可以授予该用户适当的数据库访问权限。授权语法如下:
GRANT privileges ON database.table TO 'username'@'host';
其中,'privileges’是用户的权限,可以是具体的权限(如SELECT,INSERT,UPDATE等),也可以是ALL PRIVILEGES表示所有权限。‘database.table’是要授权的数据库和表,可以使用通配符(如’*. *'表示所有数据库和表)。'username’和’host’是要授权的用户名和主机限定符。
例如,要授予’john’用户在数据库’mydb’中的所有表上的读写权限,可以使用以下命令:
GRANT ALL PRIVILEGES ON mydb.* TO 'john'@'localhost';
-
刷新权限:在授权或修改用户权限后,需要刷新MySQL权限表,使更改生效。使用以下命令刷新权限:
FLUSH PRIVILEGES;
这将使MySQL重新加载并应用最新的权限设置。
-
完成:用户已成功创建并授予相应权限。
更改密码
要给MySQL用户更改密码,可以使用以下步骤:
-
使用root或具有更改用户密码权限的用户登录到MySQL服务器。
-
执行以下命令来更改用户密码:
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
其中,'username’是要更改密码的用户名,‘host’是用户的主机限定符,可以是具体的主机名或使用通配符(如’%'表示所有主机),'new_password’是用户的新密码。
例如,要更改名为’john’的用户的密码为’mynewpassword’,可以使用以下命令:
ALTER USER 'john'@'localhost' IDENTIFIED BY 'mynewpassword';
如果用户之前没有设置密码,则使用
SET PASSWORD
语句来设置初始密码:SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
例如:
SET PASSWORD FOR 'john'@'localhost' = PASSWORD('mynewpassword');
-
刷新权限:在更改用户密码后,需要刷新MySQL权限表,使更改生效。使用以下命令刷新权限:
FLUSH PRIVILEGES;
这将使MySQL重新加载并应用最新的权限设置。
完成上述步骤后,用户的密码将被更改为新密码。请确保选择一个强密码,并妥善保管密码以确保数据库的安全。
mysql的权限分类
MySQL的权限可以分为全局权限、数据库级别权限和表级别权限。下面是对这些权限分类的详细介绍:
-
全局权限:全局权限是指对MySQL服务器整体的权限控制。具有全局权限的用户可以执行与服务器配置、用户管理和安全设置等相关的操作。常见的全局权限包括:
ALL PRIVILEGES
:拥有所有权限,包括创建用户、创建数据库、更改权限等。CREATE USER
:允许创建新用户。GRANT OPTION
:允许授予或撤销其他用户的权限。
全局权限可以授权给特定的用户,并通过
mysql.user
表中的相应字段进行管理。 -
数据库级别权限:数据库级别权限是指对特定数据库的权限控制。具有数据库级别权限的用户可以在指定数据库上执行各种操作,如创建表、修改数据、执行存储过程等。常见的数据库级别权限包括:
SELECT
:允许查询数据。INSERT
:允许插入新数据。UPDATE
:允许修改数据。DELETE
:允许删除数据。CREATE
:允许创建新表或数据库。ALTER
:允许修改表结构。DROP
:允许删除表或数据库。
数据库级别权限可以通过
GRANT
语句授权给用户,并在mysql.db
表中进行管理。 -
表级别权限:表级别权限是指对特定表的权限控制。具有表级别权限的用户可以在指定表上执行特定的操作,如查询、插入、更新、删除等。常见的表级别权限包括:
SELECT
:允许查询表数据。INSERT
:允许向表中插入新数据。UPDATE
:允许修改表中的数据。DELETE
:允许从表中删除数据。
表级别权限可以通过
GRANT
语句授权给用户,并在mysql.tables_priv
表中进行管理。
除了上述权限分类,MySQL还支持其他特殊权限,如存储过程的执行权限(EXECUTE
)、触发器的执行权限(TRIGGER
)和事件调度的权限(EVENT
)等。这些权限可以根据具体的需求和安全策略进行授权和管理。
授权实例
创建一个用户
CREATE USER 'ydh'@'%' IDENTIFIED BY '123456';
全局权限(这样授权不会有给别人授权的权力)
grant all on *.* to 'ydh'@'%';
数据库级别权限
grant all on test.* to 'ydh'@'%';
表级别权限
grant all on test.t1 to 'ydh'@'%';
表级别权限(只查看)
grant select on test.t1 to 'ydh'@'%';
注意:
创建用户的同时授予与权限(这只在mysql5版本才能有用了,8版本不行了因为这样不安全)
grant all on *.* to 'ydh'@'%' identified by '123456';
with grant option
这样这个用户就有了授权的权力了
grant all on *.* to 'ydh'@'%' identified by '123456' with grant option;
不过只能授权已有的权力
撤销权力
要撤销MySQL用户的权限,可以按照以下步骤进行操作:
-
使用root或具有撤销权限的用户登录到MySQL服务器。
-
执行以下命令来撤销用户的权限:
REVOKE privilege_type [, privilege_type ...] ON database_name.table_name FROM 'username'@'host';
其中,
privilege_type
是要撤销的权限类型,可以是多个以逗号分隔的权限。database_name
和table_name
是要撤销权限的数据库和表名。'username'@'host'
是要撤销权限的用户和主机限定符。例如,要从用户’john’@'localhost’撤销SELECT和INSERT权限,可以使用以下命令:
REVOKE SELECT, INSERT ON mydatabase.mytable FROM 'john'@'localhost';
如果要撤销用户的所有权限,可以使用
ALL PRIVILEGES
关键字:REVOKE ALL PRIVILEGES ON database_name.table_name FROM 'username'@'host';
-
刷新权限:在撤销用户权限后,需要刷新MySQL权限表,使更改生效。使用以下命令刷新权限:
FLUSH PRIVILEGES;
这将使MySQL重新加载并应用最新的权限设置。
完成上述步骤后,用户将不再具有被撤销的权限。请注意,撤销用户权限时要谨慎操作,确保只撤销需要撤销的权限,以维护数据库的安全和可控性。
mysql检查顺序
在MySQL中,当用户进行数据库访问时,会按照一定的顺序检查用户权限,以确定用户是否具有执行特定操作的权限。下面是MySQL检查用户权限的详细顺序:
-
全局权限检查:MySQL首先会检查用户是否具有全局权限。全局权限控制用户在整个MySQL服务器上的权限,例如创建用户、创建数据库和修改全局配置等。如果用户没有足够的全局权限,MySQL将拒绝用户的请求,无需进一步检查。
-
数据库级别权限检查:如果用户通过全局权限检查,MySQL会进一步检查用户是否具有访问特定数据库的权限。在数据库级别,MySQL将检查用户对目标数据库的权限,例如查询、插入、更新和删除等操作。如果用户没有对数据库的足够权限,MySQL将拒绝用户对数据库的访问请求。
-
表级别权限检查:如果用户通过数据库级别权限检查,MySQL将继续检查用户是否具有对目标表的权限。在表级别,MySQL将检查用户对特定表的权限,例如查询、插入、更新和删除等操作。如果用户没有对表的足够权限,MySQL将拒绝用户对表的访问请求。
-
列级别权限检查:在某些情况下,MySQL还可以进行列级别的权限检查。这意味着MySQL将检查用户对表中特定列的权限,例如选择特定列或更新特定列。如果用户没有对列的足够权限,MySQL将拒绝用户对列的操作请求。
需要注意的是,MySQL的权限检查是按照从全局到数据库级别,再到表级别和列级别的顺序进行的。一旦用户在某一级别的权限检查失败,后续级别的检查将不再执行。这种权限检查顺序确保了用户在访问数据库时的安全性和权限控制。
此外,还有其他因素可以影响权限检查,如角色权限和权限继承。MySQL支持角色概念,可以将一组权限分配给角色,并将角色授予用户,从而简化权限管理。另外,MySQL还支持权限继承,允许用户继承其他用户或角色的权限,减少权限分配的复杂性。
综上所述,MySQL的权限检查顺序从全局到数据库级别,再到表级别和列级别,确保了用户在访问数据库时的权限控制和安全性。
相关文件信息
在MySQL中,与用户有关的文件主要包括以下几个:
-
MySQL授权表(mysql.user):这个表记录了MySQL服务器上的用户账户和授权信息。它包含了用户名、密码加密后的哈希值、允许访问的主机等信息。通过对该表的操作,可以创建、修改和删除用户账户,以及授予或撤销用户的数据库权限。
-
密码策略文件(mysql.user表中的password_expired列):该文件定义了MySQL密码策略规则。它包含了密码过期时间、密码最小长度、密码复杂性要求等信息。这些规则用于强制用户在一定时间内更改密码,并设置强密码以提高安全性。
-
授权表缓存文件(mysql.columns_priv、mysql.db、mysql.tables_priv等):这些文件记录了数据库、表、列级别的权限信息。它们存储了用户对数据库对象的具体权限,如SELECT、INSERT、UPDATE、DELETE等。这些缓存文件提高了权限验证的性能,减少了对授权表的频繁查询。
-
权限配置文件(my.cnf或my.ini):这个文件是MySQL服务器的配置文件,其中包含了许多与用户相关的配置选项。例如,可以配置最大连接数(max_connections)和最大并发线程数(max_threads),以限制用户的并发连接数。此外,还可以配置其他安全相关的选项,如密码策略、加密算法等。
-
错误日志文件(通常为mysql-error.log):错误日志文件记录了MySQL服务器的错误和警告信息,包括与用户相关的错误。当用户登录或执行操作时出现错误,这些信息将被记录在错误日志中,以帮助故障排除和错误处理。