我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理效果(其实就是一种网络服务)。所以可以存在多个客户端连接数据库的服务器,实现多用户进行数据库操作。
那么数据库中就一定存在数据库用户的管理:创建用户、删除用户、用户授权、回收权限、修改用户密码等等。(本篇使用MySQL数据库进行案例演示)
本篇一共分为两个部分:用户管理和权限管理。
用户管理
若我们平常只能使用root用户,这样会存在很大的安全隐患,所以我们须要创建出普通用户来进行数据库操作。
如上所示,普通用户只能操作某些数据库,而root用户则可以队所有的数据库进行操作。
用户信息
在MySQL中的用户,他们的信息豆存储在mysql的user表中,如下:
如上所示,在user表中包含太多的字段,其中:
- host:表示这个用户可以从哪个主机登陆,如果localhost,表示只能本机登陆
- user:用户名
- authentication_string:用户密码通过password函数加密之后的
- *_prev:用户拥有的权限
- 其余的字段就不解释了
我们查看当前主机有哪些用户,如下:
- mysql> select host, user, authentication_string from user;
- +-----------+---------------+-------------------------------------------+
- | host | user | authentication_string |
- +-----------+---------------+-------------------------------------------+
- | localhost | root | |
- | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- +-----------+---------------+-------------------------------------------+
- 3 rows in set (0.00 sec)
复制代码 创建用户
语法:
- create user '用户名'@'登陆主机/ip' identified by '密码';
复制代码 案比方下:
- mysql> create user 'jzhong'@'localhost' identified by '200408';
- Query OK, 0 rows affected (0.05 sec)
- mysql> select host, user, authentication_string from user;
- +-----------+---------------+-------------------------------------------+
- | host | user | authentication_string |
- +-----------+---------------+-------------------------------------------+
- | localhost | root | |
- | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | localhost | jzhong | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
- +-----------+---------------+-------------------------------------------+
- 4 rows in set (0.01 sec)
- -- 用户创建好之后,我们就可以使用新用户登陆啦:
- jzhong@hcss-ecs-dc20:~$ mysql -ujzhong -p
- Enter password:
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 38
- Server version: 5.7.29 MySQL Community Server (GPL)
- Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql>
复制代码 关于新增用户这里,注意不要轻易添加一个可以在恣意地方登陆的user!!!不要将ip地址暴露在公网上!!!这是一种很危险的行为。
删除用户
删除用户语法:
删除用户也可以在user数据库下使用delete操作直接删除对应的用户,不过这样的操作通常不发起。
案比方下:
- -- 查询当前系统中有哪些用户
- mysql> select user, host, authentication_string from user;
- +---------------+-----------+-------------------------------------------+
- | user | host | authentication_string |
- +---------------+-----------+-------------------------------------------+
- | root | localhost | |
- | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | jzhong | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
- +---------------+-----------+-------------------------------------------+
- 4 rows in set (0.00 sec)
- -- 删除jzhong用户
- -- 删除用户的时候还需要加上对应的host
- mysql> drop user jzhong;
- ERROR 1396 (HY000): Operation DROP USER failed for 'jzhong'@'%'
- mysql> drop user jzhong@localhost;
- Query OK, 0 rows affected (0.00 sec)
- mysql> select user, host, authentication_string from user;
- +---------------+-----------+-------------------------------------------+
- | user | host | authentication_string |
- +---------------+-----------+-------------------------------------------+
- | root | localhost | |
- | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- +---------------+-----------+-------------------------------------------+
- 3 rows in set (0.00 sec)
复制代码 修改用户密码
修改密码可以是修改自己的密码,也可以是修改指定用户的密码:
- -- 修改自己的密码
- set password = password('新的密码');
- -- root修改指定用户的密码
- set password for '用户名'@'主机名' = password('新的密码');
复制代码 案比方下:
- mysql> select user, host, authentication_string from user;
- +---------------+-----------+-------------------------------------------+
- | user | host | authentication_string |
- +---------------+-----------+-------------------------------------------+
- | root | localhost | |
- | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | jzhong | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
- +---------------+-----------+-------------------------------------------+
- 4 rows in set (0.00 sec)
- mysql> set password for 'jzhong'@'localhost' = password('200408');
- Query OK, 0 rows affected, 1 warning (0.00 sec)
- mysql> select user, host, authentication_string from user;
- +---------------+-----------+-------------------------------------------+
- | user | host | authentication_string |
- +---------------+-----------+-------------------------------------------+
- | root | localhost | |
- | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
- | jzhong | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
- +---------------+-----------+-------------------------------------------+
- 4 rows in set (0.00 sec)
复制代码 修改密码之后,对应位置的md5值都不一样了。
数据库权限
对于刚创建的用户没有任何权限,须要给用户授权用户才能对数据库进行操作,如下:
- -- 查看当前登陆mysql的用户
- mysql> select user();
- +------------------+
- | user() |
- +------------------+
- | jzhong@localhost |
- +------------------+
- 1 row in set (0.00 sec)
- -- 当前能查看的数据库只有一个
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- +--------------------+
- 1 row in set (0.02 sec)
- -- 使用数据库时无对应的权限
- mysql> use infromation_schema;
- ERROR 1044 (42000): Access denied for user 'jzhong'@'localhost' to database 'infromation_schema'
复制代码 授权之后才能使用,当我们不想让该用户使用数据库的时候,我们也可以收回用户的权限。
MySQL数据库提供的权限列表如下:
给用户授予权限
授权语法:
- grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
- -- 说明:
- -- 1. 在权限列表处,若有多种权限,使用逗号隔开
- grant select on ...
- grant select, delete, create on ...
- grant all [privileges] on ... -- 表示赋予用户所有权限
- -- 2. *.*代表本系统中的所有数据库的所有对象
- -- 3. 库.*代表某个数据库中的所有数据对象
- -- 4. identified by可选,若用户存在,赋予权限的同时修改密码,若用户不存在,则直接创建用户
复制代码 案比方下:
如上所示,当给jzhong用户授予testDB数据库select权限之后,就可以望见该数据库了。
- -- jzhong用户下
- mysql> use testDB;
- 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> show tables;
- +------------------+
- | Tables_in_testDB |
- +------------------+
- | account |
- +------------------+
- 1 row in set (0.00 sec)
- -- 查询表内容
- mysql> select * from account;
- +----+--------+---------+
- | id | name | blance |
- +----+--------+---------+
- | 1 | 张三 | 999.00 |
- | 2 | 李四 | 5665.00 |
- | 3 | 王五 | 222.00 |
- +----+--------+---------+
- 3 rows in set (0.00 sec)
- -- 插入元素失败,没有对应的权限
- mysql> insert into account values (4, '赵六', 333);
- ERROR 1142 (42000): INSERT command denied to user 'jzhong'@'localhost' for table 'account'
复制代码 注:若发现赋权之后没有生效,执行如下命令:
回收权限
语法如下:
- revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
- -- 说明:
- -- 1. 在权限列表处,若有多种权限,使用逗号隔开
- revoke select on ...
- revoke select, delete, create on ...
- revoke all [privileges] on ... -- 表示赋予用户所有权限
- -- 2. *.*代表本系统中的所有数据库的所有对象
- -- 3. 库.*代表某个数据库中的所有数据对象
复制代码 案比方下:
如上所示,使用root用户收回jzhong用户对testDB的所有权限,jzhong用户就看不见testDB数据库了。
查看权限
查看对某个用户赋予的权限,语法如下:
- show grants for '用户名'@'登陆位置';
复制代码 如下:
- mysql> show grants for 'jzhong'@'localhost';
- +-------------------------------------------------------------------+
- | Grants for jzhong@localhost |
- +-------------------------------------------------------------------+
- | GRANT USAGE ON *.* TO 'jzhong'@'localhost' |
- | GRANT SELECT ON `testdb`.* TO 'jzhong'@'localhost' |
- | GRANT ALL PRIVILEGES ON `mysql`.`testdb` TO 'jzhong'@'localhost' |
- | GRANT ALL PRIVILEGES ON `mysql`.`indexdb` TO 'jzhong'@'localhost' |
- +-------------------------------------------------------------------+
- 4 rows in set (0.00 sec)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |