可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。
$ mysql -u root -p
password:
mysql> create database test; # 创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> show databases; # 查看数据库是否创建成功
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> grant all on test.* to user1@'%' identified by '123456' with grant option; # 创建特权管理用户
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user; # 查看用户创建是否成功
+------------------+-----------+
| user | host |
+------------------+-----------+
| user1 | % |
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | server |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql> show grants for user1; # 查看用户权限
+--------------------------------------------------------------------------------------------------+
| Grants for user1@% |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*6BB...2CA2AD9' |
| GRANT ALL PRIVILEGES ON `test`.* TO 'user1'@'%' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
GRANT 语法:
GRANT privileges (columns)
ON what
TO user IDENTIFIED BY "password"
WITH GRANT OPTION
权限列表:
- ALTER: 修改表和索引。
- CREATE: 创建数据库和表。
- DELETE: 删除表中已有的记录。
- DROP: 抛弃(删除)数据库和表。
- INDEX: 创建或抛弃索引。
- INSERT: 向表中插入新行。
- REFERENCE: 未用。
- SELECT: 检索表中的记录。
- UPDATE: 修改现存表记录。
- FILE: 读或写服务器上的文件。
- PROCESS: 查看服务器中执行的线程信息或杀死线程。
- RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
- SHUTDOWN: 关闭服务器。
- ALL: 所有权限,ALL PRIVILEGES同义词。
- USAGE: 特殊的 "无权限" 权限。
用
户账户包括 "username" 和 "host" 两部分,后者表示该用户被允许从何地接入。user1@'%'
表示任何地址,默认可以省略。还可以是 "user1@192.168.1.%"、"user1@%.abc.com" 等。数据库格式为
db@table,可以是 "test.*" 或 "*.*",前者表示 test 数据库的所有表,后者表示所有数据库的所有表。
子句 "WITH GRANT OPTION" 表示该用户可以为其他用户分配权限。
我们用 root 再创建几个用户,然后由 test 数据库的管理员 user1 为他们分配权限。
mysql> create user user2 identified by '123456', user3 identified by 'abcd';
Query OK, 0 rows affected (0.00 sec)
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| user1 | % |
| user2 | % |
| user3 | % |
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | server |
+------------------+-----------+
7 rows in set (0.00 sec)
好了,我们退出改用 user1 登录并针对 test 数据库进行操作。
mysql> quit # 退出
Bye
$ mysql -u user1 -p123456 test # 使用新用户登录
mysql> select database(); # 确认当前工作数据库
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
mysql> select current_user(); # 确认当前工作账户
+----------------+
| current_user() |
+----------------+
| user1@% |
+----------------+
1 row in set (0.00 sec)
继续,创建一个数据表。
mysql> create table table1 # 创建表
-> (
-> name varchar(50),
-> age integer
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> show tables; # 查看表是否创建成功
+----------------+
| Tables_in_test |
+----------------+
| table1 |
+----------------+
1 row in set (0.00 sec)
mysql> describe table1; # 查看表结构
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into table1 values('Tom', 20); # 插入记录
Query OK, 1 row affected (0.00 sec)
mysql> select * from table1; # 查询记录
+------+------+
| name | age |
+------+------+
| Tom | 20 |
+------+------+
1 row in set (0.00 sec)
接下来我们为 user2, user3 分配权限。
mysql> grant select on test.* to user2; # 为 user2 分配 SELECT 权限。
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on test.* to user3; # 为 user3 分配 SELECT 权限。
Query OK, 0 rows affected (0.00 sec)
mysql> grant insert, update on test.* to user2; # 再为 user2 增加 INSERT, UPDATE 权限。
Query OK, 0 rows affected (0.00 sec)
好了,我们退出,切换成 user2 操作看看。
$ mysql -u user2 -p123456
mysql> use test; # 切换工作数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select database(); # 验证当前工作数据库
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
mysql> select user(); # 验证当前账户
+-----------------+
| user() |
+-----------------+
| user2@localhost |
+-----------------+
1 row in set (0.00 sec)
mysql> show grants for user2; # 查看当前用户权限,显然后来添加的 INSERT, UPDATE 被添加了。
+--------------------------------------------------------------------------------------------------+
| Grants for user2@% |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*6BB837....2C9' |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'user2'@'%' |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
进行操作测试。
mysql> insert into table1 values("Jack", 21); # INSERT 操作成功
Query OK, 1 row affected (0.00 sec)
mysql> update table1 set age=22 where name='Jack'; # UPDATE 操作成功
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from table1; # SELECT 操作成功
+------+------+
| name | age |
+------+------+
| Tom | 20 |
| Jack | 22 |
+------+------+
2 rows in set (0.00 sec)
mysql> delete from table1 where age=22; # DELETE 操作无权限
ERROR 1142 (42000): DELETE command denied to user 'user2'@'localhost' for table 'table1'
我们切换回 user1 管理账户,移除 user2 的 UPDATE 权限看看。
$ mysql -u user1 -p123456 test
mysql> revoke update on test.* from user2; # 移除 UPDATE 权限
Query OK, 0 rows affected (0.00 sec)
再次切换回 user2。
$ mysql -u user2 -p123456 test
mysql> show grants for user2; # UPDATE 权限被移除
+--------------------------------------------------------------------------------------------------+
| Grants for user2@% |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*6B...2AD9' |
| GRANT SELECT, INSERT ON `test`.* TO 'user2'@'%' |
+--------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> update table1 set age=23 where name='Jack'; # 不在拥有 UPDATE 权限
ERROR 1142 (42000): UPDATE command denied to user 'user2'@'localhost' for table 'table1'
好了,到此我们基本完成了创建用户和分配权限的操作。接下来,我们回到 root 进行修改用户密码和删除用户操作。
$ mysql -u root -p123456
mysql> set password for user3=password('abcabc'); # 修改用户 user3 密码
Query OK, 0 rows affected (0.00 sec)
mysql>flush privileges; # 刷新权限表(通常只在直接修改相关管理数据表后需要该操作)
Query OK, 0 rows affected (0.00 sec)
mysql> revoke all on *.* from user2; # 移除 user2 在所有数据库上的权限
Query OK, 0 rows affected (0.00 sec)
mysql> drop user user2; # 删除 user2 账户
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user; # 验证删除结果
+------------------+-----------+
| user | host |
+------------------+-----------+
| user1 | % |
| user3 | % |
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | server |
+------------------+-----------+
6 rows in set (0.00 sec)
用户 user2 无法再次使用。
$ mysql -u user2 -p123456 test
ERROR 1045 (28000): Access denied for user 'user2'@'localhost' (using password: YES)
试试 user3。
$ mysql -u user3 -pabc test # 连接失败!哦,对了,我们修改了密码。
ERROR 1045 (28000): Access denied for user 'user3'@'localhost' (using password: YES)
$ mysql -u user3 -pabcabc test # 新密码成功
mysql> select * from table1; # SELECT 操作成功
+------+------+
| name | age |
+------+------+
| Tom | 20 |
| Jack | 22 |
+------+------+
2 rows in set (0.00 sec)
要修改自己的密码直接执行 "set password = password('new_password');" 即可。
------- 摘要 --------------------------------------
创建用户:
GRANT insert, update ON testdb.* TO user1@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
CREATE USER user2 IDENTIFIED BY 'password';
分配权限:
GRANT select ON testdb.* TO user2;
查看权限:
SHOW GRANTS FOR user1;
修改密码:
SET PASSWORD FOR user1 = PASSWORD('newpwd');
SET PASSWORD = PASSWORD('newpwd');
移除权限:
REVOKE all ON *.* FROM user1;
删除用户:
DROP USER user1;
数据库列表:
SHOW DATABASES;
数据表列表:
SHOW TABLES;
当前数据库:
SELECT DATABASE();
当前用户:
SELECT USER();
数据表结构:
DESCRIBE table1;
刷新权限:
FLUSH PRIVILEGES;
分享到:
相关推荐
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛使用。本文将详细介绍MySQL 8.0.20的安装过程,该版本适用于Linux发行版中的EL7(Enterprise Linux 7,如CentOS 7)。提供的压缩包文件...
此外,它还提供了身份验证插件管理,便于配置和管理用户权限。 8. **复制和集群管理**:MySQL Shell包含对InnoDB集群的全面支持,允许用户轻松设置、监控和管理复制集群。 9. **脚本和自动化**:用户可以编写脚...
5. **权限管理**:用户可以管理MySQL用户的权限,分配不同的访问级别和操作权限,确保数据安全性。 6. **连接管理**:支持保存多个MySQL服务器的连接信息,方便切换和管理不同的数据库环境。 7. **数据同步**:...
4. 用户权限:管理MySQL用户的权限是MySQL-Front的重要功能之一,用户可以轻松分配不同级别的访问权限,确保数据安全。 5. 连接配置:用户可以添加、编辑和管理多个MySQL服务器的连接,包括设置主机名、端口、...
- **权限管理**:合理分配用户权限,遵循最小权限原则,防止不必要的安全风险。 - **索引优化**:根据查询模式创建合适的索引,提高查询速度。 - **错误日志**:查看错误日志(error.log)可以帮助诊断和解决运行...
通过其直观的GUI(图形用户界面),用户可以轻松地创建数据库模式、编写和执行SQL查询、管理用户权限,以及监控数据库性能。此外,它还支持版本控制,使得团队协作变得更加顺畅。 MySQL Administrator则是一个强大...
4. 安全性:提供了用户权限管理,可以限制用户访问特定的数据库或表,保障数据安全。 5. 性能优化:包括索引、查询缓存、分区等特性,以提高查询效率。 其次,"MySQL-Front_Setup"是一个图形用户界面(GUI)工具,...
8. **安全性**:MySQL-Front提供了用户权限管理,确保只有授权的用户才能访问特定的数据库或表,保障数据安全。 9. **版本兼容**:MySQL-Front与多种版本的MySQL服务器兼容,包括较新的MySQL 8.x版本,确保用户能够...
6. 权限管理:用户可以设置数据库用户的权限,分配不同级别的访问权限,以确保数据安全。 7. 报表和图表:通过数据统计和分析,MySQL-Front能生成报表和图表,帮助用户更好地理解数据库内容和趋势。 8. 备份与恢复...
- **权限管理**:可以管理用户的访问权限,分配角色和权限。 - **查询分析器**:提供性能分析工具,帮助优化SQL查询性能。 3. **使用技巧**: - **模板功能**:创建和保存常用的SQL查询作为模板,提高工作效率。...
- **权限和角色**:验证用户权限是否足够进行升级操作,并给出相应建议。 - **存储过程和触发器**:检查这些数据库对象在升级后是否仍能正常运行。 - **系统变量**:对比系统变量设置,提醒用户可能需要调整的参数。...
MySQL 是一个广泛使用的开源关系型数据库管理系统,提供了丰富的命令行工具,用于管理数据库、执行SQL语句以及备份恢复数据等操作。本文将基于给定的文件信息,深入解析MySQL命令行工具的常用命令及其应用场景。 ##...
- 除了密码策略,还可以通过GRANT和REVOKE语句管理用户权限,实现细粒度的访问控制。 14. **优化器改进** - MySQL 8.0的查询优化器有了显著提升,能更准确地选择执行计划,提高查询效率。 总之,“mysql-8.0.26-...
安装完成后,MySQL Server会自动启动,你可以通过MySQL Workbench进行数据库管理,包括创建数据库、用户管理、执行SQL语句等操作。 总之,MySQL 8.0.28.0社区版提供了许多先进的特性和优化,而“mysql-installer-...
8. 用户权限:你可以通过MySQL-Front设置和管理用户权限,控制用户对数据库和表的访问级别。 9. 多语言支持:MySQL-Front支持多种语言,满足不同地区用户的使用需求。 10. 自定义模板:允许用户自定义SQL模板,...
9. **安全性**:MySQL Cluster支持SSL连接、用户权限管理、审计日志等功能,确保数据安全。用户应配置适当的访问控制和加密策略。 10. **监控与故障排查**:利用日志文件、性能监视器以及MySQL的监控工具(如`SHOW ...
7. **设置权限和服务**:创建MySQL的系统用户和服务,并调整相应权限。在Unix-like系统上,这通常涉及修改`my.cnf`配置文件和设置启动脚本。 8. **启动服务**:使用系统服务管理命令(如`systemctl start mysqld`或...
同时,也有更好的权限管理系统,允许管理员精细控制不同用户对数据库的访问权限。 总的来说,"mysql-essential-5.1.52-win32" 是一个包含了MySQL服务器和客户端工具的全面安装包,适用于需要在Windows环境下搭建...
10. **安全增强**:MySQL 5.7引入了增强的安全特性,如默认使用更安全的加密协议,提高了对用户权限的管理,并提供了审计日志功能,帮助管理员追踪数据库活动。 11. **复制功能**:MySQL的复制功能在5.7版本中也...
2. **更好的安全特性**:MySQL 8.0加强了身份验证和权限管理,包括内置的Caching_sha2_password认证插件,提供更强大的加密算法。此外,还引入了空间索引和动态密码策略,以增强数据保护。 3. **改进的SQL语法**:...