`
wangrl
  • 浏览: 152327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL - 用户及权限管理

 
阅读更多

可以用 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-8.0.20-el7-x86_64.tar.gz mysql-8.0.20安装包下载

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛使用。本文将详细介绍MySQL 8.0.20的安装过程,该版本适用于Linux发行版中的EL7(Enterprise Linux 7,如CentOS 7)。提供的压缩包文件...

    mysql-shell:mysql-shell-8.4.0-windows-x86-64bit.zip

    此外,它还提供了身份验证插件管理,便于配置和管理用户权限。 8. **复制和集群管理**:MySQL Shell包含对InnoDB集群的全面支持,允许用户轻松设置、监控和管理复制集群。 9. **脚本和自动化**:用户可以编写脚...

    mysql-front 6.1

    5. **权限管理**:用户可以管理MySQL用户的权限,分配不同的访问级别和操作权限,确保数据安全性。 6. **连接管理**:支持保存多个MySQL服务器的连接信息,方便切换和管理不同的数据库环境。 7. **数据同步**:...

    MySQL-Front 安装包+注册码

    4. 用户权限:管理MySQL用户的权限是MySQL-Front的重要功能之一,用户可以轻松分配不同级别的访问权限,确保数据安全。 5. 连接配置:用户可以添加、编辑和管理多个MySQL服务器的连接,包括设置主机名、端口、...

    mysql-8.0.33-winx64.zip(mysql安装包)

    - **权限管理**:合理分配用户权限,遵循最小权限原则,防止不必要的安全风险。 - **索引优化**:根据查询模式创建合适的索引,提高查询速度。 - **错误日志**:查看错误日志(error.log)可以帮助诊断和解决运行...

    mysql-gui-tools

    通过其直观的GUI(图形用户界面),用户可以轻松地创建数据库模式、编写和执行SQL查询、管理用户权限,以及监控数据库性能。此外,它还支持版本控制,使得团队协作变得更加顺畅。 MySQL Administrator则是一个强大...

    mysql-5.0.27-win32及mysql-front安装文件

    4. 安全性:提供了用户权限管理,可以限制用户访问特定的数据库或表,保障数据安全。 5. 性能优化:包括索引、查询缓存、分区等特性,以提高查询效率。 其次,"MySQL-Front_Setup"是一个图形用户界面(GUI)工具,...

    MySQL-Front 小巧实用 MYSQL 数据库管理工具

    8. **安全性**:MySQL-Front提供了用户权限管理,确保只有授权的用户才能访问特定的数据库或表,保障数据安全。 9. **版本兼容**:MySQL-Front与多种版本的MySQL服务器兼容,包括较新的MySQL 8.x版本,确保用户能够...

    MySQL-Front 免安装 绿色版

    6. 权限管理:用户可以设置数据库用户的权限,分配不同级别的访问权限,以确保数据安全。 7. 报表和图表:通过数据统计和分析,MySQL-Front能生成报表和图表,帮助用户更好地理解数据库内容和趋势。 8. 备份与恢复...

    MySQL-Front_Setup

    - **权限管理**:可以管理用户的访问权限,分配角色和权限。 - **查询分析器**:提供性能分析工具,帮助优化SQL查询性能。 3. **使用技巧**: - **模板功能**:创建和保存常用的SQL查询作为模板,提高工作效率。...

    mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz

    - **权限和角色**:验证用户权限是否足够进行升级操作,并给出相应建议。 - **存储过程和触发器**:检查这些数据库对象在升级后是否仍能正常运行。 - **系统变量**:对比系统变量设置,提醒用户可能需要调整的参数。...

    mysql命令,mysql -h主机地址 -u用户名 -p密码

    MySQL 是一个广泛使用的开源关系型数据库管理系统,提供了丰富的命令行工具,用于管理数据库、执行SQL语句以及备份恢复数据等操作。本文将基于给定的文件信息,深入解析MySQL命令行工具的常用命令及其应用场景。 ##...

    mysql-8.0.26-winx64.zip

    - 除了密码策略,还可以通过GRANT和REVOKE语句管理用户权限,实现细粒度的访问控制。 14. **优化器改进** - MySQL 8.0的查询优化器有了显著提升,能更准确地选择执行计划,提高查询效率。 总之,“mysql-8.0.26-...

    mysql-installer-community-8.0.28.0 MySql数据库安装包

    安装完成后,MySQL Server会自动启动,你可以通过MySQL Workbench进行数据库管理,包括创建数据库、用户管理、执行SQL语句等操作。 总之,MySQL 8.0.28.0社区版提供了许多先进的特性和优化,而“mysql-installer-...

    MySQL-Front-Setup.rar

    8. 用户权限:你可以通过MySQL-Front设置和管理用户权限,控制用户对数据库和表的访问级别。 9. 多语言支持:MySQL-Front支持多种语言,满足不同地区用户的使用需求。 10. 自定义模板:允许用户自定义SQL模板,...

    mysql-cluster-8.0.20-winx64.zip

    9. **安全性**:MySQL Cluster支持SSL连接、用户权限管理、审计日志等功能,确保数据安全。用户应配置适当的访问控制和加密策略。 10. **监控与故障排查**:利用日志文件、性能监视器以及MySQL的监控工具(如`SHOW ...

    mysql-boost-5.7.20.tar.gz

    7. **设置权限和服务**:创建MySQL的系统用户和服务,并调整相应权限。在Unix-like系统上,这通常涉及修改`my.cnf`配置文件和设置启动脚本。 8. **启动服务**:使用系统服务管理命令(如`systemctl start mysqld`或...

    mysql-essential-5.1.52-win32

    同时,也有更好的权限管理系统,允许管理员精细控制不同用户对数据库的访问权限。 总的来说,"mysql-essential-5.1.52-win32" 是一个包含了MySQL服务器和客户端工具的全面安装包,适用于需要在Windows环境下搭建...

    mysql-installer-community-5.7.28.0.zip

    10. **安全增强**:MySQL 5.7引入了增强的安全特性,如默认使用更安全的加密协议,提高了对用户权限的管理,并提供了审计日志功能,帮助管理员追踪数据库活动。 11. **复制功能**:MySQL的复制功能在5.7版本中也...

    mysql-installer-community-8.0.34.0.msi

    2. **更好的安全特性**:MySQL 8.0加强了身份验证和权限管理,包括内置的Caching_sha2_password认证插件,提供更强大的加密算法。此外,还引入了空间索引和动态密码策略,以增强数据保护。 3. **改进的SQL语法**:...

Global site tag (gtag.js) - Google Analytics