搜索
 找回密码
 立即注册
发新帖

mariadb教程[74] 安全管理

时间:2020-3-21 19:29 0 631 | 复制链接 |

610

主题

610

帖子

0

积分

网站编辑

Rank: 8Rank: 8

积分
0
本帖最后由 O'Reilly 于 2020-3-22 21:13 编辑

确保数据的安全和完整需要利用访问控制。mariadb服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过多的访问权。管理访问控制需要创建和管理用户账号。mariadb创建一个名为root的用户账号,它对整个mariadb服务器具有完全的控制。
mariadb数据库有一个名为user的表,它包含所有用户账号。user表有一个名为user的列,它存储用户登录名。
use mysql;
select * from user;

创建用户账号
为了创建一个新用户账号,可以使用create user语句
create user ben identified by 'p@$$0rd';
在创建用户账号时不一定需要口令
grant语句也可以创建用户账号,但一般来说create user是最清楚和最简单的句子。此外也可以通过直接插入行到user表来增加用户,不过为了安全起见,一般不建议这么做。
为重新命名一个用户账号,使用rename user语句
rename user ben to bforta;
也可以使用update直接更新user表。

删除用户账号
为了删除一个用户账号以及相关的权限,使用drop user语句。
drop user bforta;
如果使用旧版的mariadb需要先用revoke删除与账号相关的权限,然后再用update user删除账号。

设置访问权限
在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限。它们能登录mariadb,但不能看到数据,不能执行任何数据库操作哦。
为看到赋予用户账号的权限,使用show grans for,如:
show grants for bforta;
grant usage on *.* to 'bforta'@'%'
输出结果用户有一个权限usage on *.*。usage表示根本没有权限。所以此结果表示在任意数据库和任意表上对任何东西没有权限。
mariadb的权限用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%(授予用户访问权限而不管主机名)。
为设置权限,使用grant语句。grant要求你至少给出以下信息:
1.要授予的权限
2.被授予访问权限的数据库或表
3.用户名
以下例子给出grant的用户
grant select on crashcourse.* to bforta;
此grant允许用户在crashcourse.*(crashcourse数据库的所有表)上使用select。通过只授予select访问权限,用户bforta对crashcourse数据库中的所有数据具有只读访问权限。
show grants for bforta;可以查出这个更改。
grant的反操作为revoke,用它来撤销特定的权限。
revoke select on crashcourse.* from bforta;
grant和revoke可在几个层级上控制访问权限:
1.整个服务器,使用grant all和revoke all
2.整个数据库,使用on database.*
3.特定的表,使用on database.table
4.特定的列
5.特定的存储过程
捕获.PNG
捕获.PNG
在使用grant和revoke时,用户账号必须存在,但对所涉及的对象没有这个要求。这允许管理员在创建数据库和表之前设计和实现安全措施。
这样做的副作用是当某个数据库或表被删除时(用drop语句),相关的访问权限仍然存在。而且,如果将来重新创建该数据库或表,这些权限仍然起作用。
可通过列出各权限并用逗号分隔,将多条grant语句串在一起。
grant select,insert on crashcourse.* to bforta;

更改口令
为了更改用户口令,可使用set password语句。新口令必须如下加密:
set password for bforta=Password('n3w p@$$w0rd');
如果想设置自己的口令可以
set password=Password('n3w p@$$w0rd');
在不指定用户名时,set password更新当前登录用户的口令。


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

本版积分规则

快速回复 返回列表 返回顶部