数据库中的用户管理和权限管理

打印 上一主题 下一主题

主题 1614|帖子 1614|积分 4842

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理效果(其实就是一种网络服务)。所以可以存在多个客户端连接数据库的服务器,实现多用户进行数据库操作。
​ 那么数据库中就一定存在数据库用户的管理:创建用户、删除用户、用户授权、回收权限、修改用户密码等等。(本篇使用MySQL数据库进行案例演示)
​ 本篇一共分为两个部分:用户管理和权限管理。

  
用户管理

​ 若我们平常只能使用root用户,这样会存在很大的安全隐患,所以我们须要创建出普通用户来进行数据库操作。

​ 如上所示,普通用户只能操作某些数据库,而root用户则可以队所有的数据库进行操作。
用户信息

​ 在MySQL中的用户,他们的信息豆存储在mysql的user表中,如下:

​ 如上所示,在user表中包含太多的字段,其中:
   

  • host:表示这个用户可以从哪个主机登陆,如果localhost,表示只能本机登陆
  • user:用户名
  • authentication_string:用户密码通过password函数加密之后的
  • *_prev:用户拥有的权限
  • 其余的字段就不解释了
  ​ 我们查看当前主机有哪些用户,如下:
  1. mysql> select host, user, authentication_string from user;
  2. +-----------+---------------+-------------------------------------------+
  3. | host      | user          | authentication_string                     |
  4. +-----------+---------------+-------------------------------------------+
  5. | localhost | root          |                                           |
  6. | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  7. | localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  8. +-----------+---------------+-------------------------------------------+
  9. 3 rows in set (0.00 sec)
复制代码
创建用户

​ 语法:
  1. create user '用户名'@'登陆主机/ip' identified by '密码';
复制代码
​ 案比方下:
  1. mysql> create user 'jzhong'@'localhost' identified by '200408';
  2. Query OK, 0 rows affected (0.05 sec)
  3. mysql> select host, user, authentication_string from user;
  4. +-----------+---------------+-------------------------------------------+
  5. | host      | user          | authentication_string                     |
  6. +-----------+---------------+-------------------------------------------+
  7. | localhost | root          |                                           |
  8. | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  9. | localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  10. | localhost | jzhong        | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
  11. +-----------+---------------+-------------------------------------------+
  12. 4 rows in set (0.01 sec)
  13. -- 用户创建好之后,我们就可以使用新用户登陆啦:
  14. jzhong@hcss-ecs-dc20:~$ mysql -ujzhong -p
  15. Enter password:
  16. Welcome to the MySQL monitor.  Commands end with ; or \g.
  17. Your MySQL connection id is 38
  18. Server version: 5.7.29 MySQL Community Server (GPL)
  19. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  20. Oracle is a registered trademark of Oracle Corporation and/or its
  21. affiliates. Other names may be trademarks of their respective
  22. owners.
  23. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  24. mysql>
复制代码
​ 关于新增用户这里,注意不要轻易添加一个可以在恣意地方登陆的user!!!不要将ip地址暴露在公网上!!!这是一种很危险的行为。
删除用户

​ 删除用户语法:
  1. drop user '用户名'@'主机名'
复制代码
​ 删除用户也可以在user数据库下使用delete操作直接删除对应的用户,不过这样的操作通常不发起。
​ 案比方下:
  1. -- 查询当前系统中有哪些用户
  2. mysql> select user, host, authentication_string from user;
  3. +---------------+-----------+-------------------------------------------+
  4. | user          | host      | authentication_string                     |
  5. +---------------+-----------+-------------------------------------------+
  6. | root          | localhost |                                           |
  7. | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  8. | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  9. | jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
  10. +---------------+-----------+-------------------------------------------+
  11. 4 rows in set (0.00 sec)
  12. -- 删除jzhong用户
  13. -- 删除用户的时候还需要加上对应的host
  14. mysql> drop user jzhong;
  15. ERROR 1396 (HY000): Operation DROP USER failed for 'jzhong'@'%'
  16. mysql> drop user jzhong@localhost;
  17. Query OK, 0 rows affected (0.00 sec)
  18. mysql> select user, host, authentication_string from user;
  19. +---------------+-----------+-------------------------------------------+
  20. | user          | host      | authentication_string                     |
  21. +---------------+-----------+-------------------------------------------+
  22. | root          | localhost |                                           |
  23. | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  24. | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  25. +---------------+-----------+-------------------------------------------+
  26. 3 rows in set (0.00 sec)
复制代码
修改用户密码

​ 修改密码可以是修改自己的密码,也可以是修改指定用户的密码:
  1. -- 修改自己的密码
  2. set password = password('新的密码');
  3. -- root修改指定用户的密码
  4. set password for '用户名'@'主机名' = password('新的密码');
复制代码
​ 案比方下:
  1. mysql> select user, host, authentication_string from user;
  2. +---------------+-----------+-------------------------------------------+
  3. | user          | host      | authentication_string                     |
  4. +---------------+-----------+-------------------------------------------+
  5. | root          | localhost |                                           |
  6. | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  7. | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  8. | jzhong        | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
  9. +---------------+-----------+-------------------------------------------+
  10. 4 rows in set (0.00 sec)
  11. mysql> set password for 'jzhong'@'localhost' = password('200408');
  12. Query OK, 0 rows affected, 1 warning (0.00 sec)
  13. mysql> select user, host, authentication_string from user;
  14. +---------------+-----------+-------------------------------------------+
  15. | user          | host      | authentication_string                     |
  16. +---------------+-----------+-------------------------------------------+
  17. | root          | localhost |                                           |
  18. | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  19. | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  20. | jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
  21. +---------------+-----------+-------------------------------------------+
  22. 4 rows in set (0.00 sec)
复制代码
​ 修改密码之后,对应位置的md5值都不一样了。
数据库权限

​ 对于刚创建的用户没有任何权限,须要给用户授权用户才能对数据库进行操作,如下:
  1. -- 查看当前登陆mysql的用户
  2. mysql> select user();
  3. +------------------+
  4. | user()           |
  5. +------------------+
  6. | jzhong@localhost |
  7. +------------------+
  8. 1 row in set (0.00 sec)
  9. -- 当前能查看的数据库只有一个
  10. mysql> show databases;
  11. +--------------------+
  12. | Database           |
  13. +--------------------+
  14. | information_schema |
  15. +--------------------+
  16. 1 row in set (0.02 sec)
  17. -- 使用数据库时无对应的权限
  18. mysql> use infromation_schema;
  19. ERROR 1044 (42000): Access denied for user 'jzhong'@'localhost' to database 'infromation_schema'
复制代码
​ 授权之后才能使用,当我们不想让该用户使用数据库的时候,我们也可以收回用户的权限。
​ MySQL数据库提供的权限列表如下:

给用户授予权限

​ 授权语法:
  1. grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
  2. -- 说明:
  3. -- 1. 在权限列表处,若有多种权限,使用逗号隔开
  4. grant select on ...
  5. grant select, delete, create on ...
  6. grant all [privileges] on ... -- 表示赋予用户所有权限
  7. -- 2. *.*代表本系统中的所有数据库的所有对象
  8. -- 3. 库.*代表某个数据库中的所有数据对象
  9. -- 4. identified by可选,若用户存在,赋予权限的同时修改密码,若用户不存在,则直接创建用户
复制代码
​ 案比方下:

​ 如上所示,当给jzhong用户授予testDB数据库select权限之后,就可以望见该数据库了。
  1. -- jzhong用户下
  2. mysql> use testDB;
  3. Reading table information for completion of table and column names
  4. You can turn off this feature to get a quicker startup with -A
  5. Database changed
  6. mysql> show tables;
  7. +------------------+
  8. | Tables_in_testDB |
  9. +------------------+
  10. | account          |
  11. +------------------+
  12. 1 row in set (0.00 sec)
  13. -- 查询表内容
  14. mysql> select * from account;
  15. +----+--------+---------+
  16. | id | name   | blance  |
  17. +----+--------+---------+
  18. |  1 | 张三   |  999.00 |
  19. |  2 | 李四   | 5665.00 |
  20. |  3 | 王五   |  222.00 |
  21. +----+--------+---------+
  22. 3 rows in set (0.00 sec)
  23. -- 插入元素失败,没有对应的权限
  24. mysql> insert into account values (4, '赵六', 333);
  25. ERROR 1142 (42000): INSERT command denied to user 'jzhong'@'localhost' for table 'account'
复制代码
​ 注:若发现赋权之后没有生效,执行如下命令:
  1. flush privileges
复制代码
回收权限

​ 语法如下:
  1. revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
  2. -- 说明:
  3. -- 1. 在权限列表处,若有多种权限,使用逗号隔开
  4. revoke select on ...
  5. revoke select, delete, create on ...
  6. revoke all [privileges] on ... -- 表示赋予用户所有权限
  7. -- 2. *.*代表本系统中的所有数据库的所有对象
  8. -- 3. 库.*代表某个数据库中的所有数据对象
复制代码
​ 案比方下:

​ 如上所示,使用root用户收回jzhong用户对testDB的所有权限,jzhong用户就看不见testDB数据库了。
查看权限

​ 查看对某个用户赋予的权限,语法如下:
  1. show grants for '用户名'@'登陆位置';
复制代码
​ 如下:
  1. mysql> show grants for 'jzhong'@'localhost';
  2. +-------------------------------------------------------------------+
  3. | Grants for jzhong@localhost                                       |
  4. +-------------------------------------------------------------------+
  5. | GRANT USAGE ON *.* TO 'jzhong'@'localhost'                        |
  6. | GRANT SELECT ON `testdb`.* TO 'jzhong'@'localhost'                |
  7. | GRANT ALL PRIVILEGES ON `mysql`.`testdb` TO 'jzhong'@'localhost'  |
  8. | GRANT ALL PRIVILEGES ON `mysql`.`indexdb` TO 'jzhong'@'localhost' |
  9. +-------------------------------------------------------------------+
  10. 4 rows in set (0.00 sec)
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表