mysql 权限与安全

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: --创建schemacreate schema rudy;--创建一个他人拥有的schemacreate schema rudy_schema authorization rudy;--在创建表时,如果没有指定模式则在默认为public模式create table rudy.
--创建schema
create schema rudy;
--创建一个他人拥有的schema
create schema rudy_schema authorization rudy;
--在创建表时,如果没有指定模式则在默认为public模式
create table rudy.t(id serial);

--设置模式的搜索路径
show search_path;
set search_path to rudy_schema,public;


--创建用户,用户和用户组在整个集群范围内共享
create user rudy with password '123456';
select * from pg_roles;
select * from pg_user;

--赋予权限角色
CREATE ROLE postgres SUPERUSER;
grant postgres to wcs_p;
grant all privileges on database wcsdb to postgres;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO wcsdb;


--创建只读账号
create user rudy with password '123456';
create schema rudy;
--切换连接到super用户下,其中横线(-)表示仍然连接当前数据库,如果是其它的数据库需要带上数据库的名字
\c - postgres
grant USAGE on SCHEMA rudy to rudy;
grant SELECT ON all tables in schema rudy to rudy;


--查询可以
mydb=> select * from rudy.t;
 id 
----
(0 rows)
--但没有insert权限
mydb=> insert into rudy.t values(1);
ERROR:  permission denied for relation t

--赋予插入权限
grant insert on table rudy.t to rudy;


--设置user/role为只读,注意它只对之后建立的连接起作用,对当前连接不起作用
alter user rudy set default_transaction_read_only=true;
alter role rudy reset default_transaction_read_only;

--此时用户即使有插入权限也不能执行插入
mydb=> insert into rudy.t values(1);
ERROR:  cannot execute INSERT in a read-only transaction

--查看用户的隔离级别
show default_transaction_read_only;

--查看哪些用户对表有权限
\z rudy.t 或者 \dp rudy.t
select relname,relacl from pg_class where relname='t';

--权限字母代表的权限的意思如下:
a: insert
r: select
w: update
d: delete
x: references
t: trigger
D: truncate

--查看系统表,查看角色权限
select * from INFORMATION_SCHEMA.role_table_grants where grantee='ztravel';

--查看一个表被授予了哪些权限给用户
select * from information_schema.role_table_grants where grantee='ztravel' and table_name='new_year_user_award_record';

--查看用户与角色之间的关系
select pr1.rolname 角色名,pr2.rolname 成员名 from pg_auth_members pam,pg_roles pr1,pg_roles pr2 where pam.roleid=pr1.oid and pam.member=pr2.oid;
select pr1.rolname 角色名,pr2.usename 成员名 from pg_auth_members pam,pg_roles pr1,pg_user pr2 where pam.roleid=pr1.oid and pam.member=pr2.usesysid; 


--对于USAGE权限,必须赋予用户,否则用户不能使用相对应的schema权限(即使给用户赋予了其它权限)
postgres=# revoke usage on SCHEMA statsrepo from dba; 
REVOKE
postgres=# grant select on table statsrepo.test to dba;
GRANT
--用户拥有select权限但没有usage权限,不能查询表
postgres=> select * from statsrepo.test;
ERROR:  permission denied for schema statsrepo
LINE 1: select * from statsrepo.test;
--给用户usage权限,能够正确查询
postgres=# grant USAGE on SCHEMA statsrepo to dba;  
postgres=> select * from statsrepo.test;
 id 
----
(0 rows)

--查看某个sequence的权限给了哪些用户或role角色
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.array_to_string(c.relacl, E'\n') AS "Access privileges",
  pg_catalog.array_to_string(ARRAY(
    SELECT attname || E':\n  ' || pg_catalog.array_to_string(attacl, E'\n  ')
    FROM pg_catalog.pg_attribute a
    WHERE attrelid = c.oid AND NOT attisdropped AND attacl IS NOT NULL
  ), E'\n') AS "Column access privileges"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'v', 'm', 'S', 'f')
  AND c.relname ~ '^(t_seq)$'
  AND n.nspname !~ '^pg_' AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2


--如果有以下错误,请查看数据库的监听地址
psql: could not connect to server: Connection refused
        Is the server running on host "rudy_01" (10.10.10.219) and accepting
        TCP/IP connections on port 5431?
		
listen_addresses = '*'    

--如果有 psql: FATAL:  no pg_hba.conf entry for host "10.10.10.219", user "repuser", database "repuser" 错误
--请检查连接的ip以及连接的数据库与连接的用户名
 host   all     repuser          192.168.174.0/24         md5
 host   all     repuser          0.0.0.0/32         md5  ##匹配唯一的ip
 host   all     repuser          0.0.0.0/0         md5   ##匹配所有的ip
 
 
 --查看用户是否有表列上的权限
postgres=> select has_any_column_privilege('dba','t2','insert,update');
 has_any_column_privilege 
--------------------------
 t 
 
 --查看用户是否有role
 postgres=> select pg_has_role('rudy','dba','member');                  
 pg_has_role 
-------------
 f

 
 --查看用户能否看到某张表的内容,pg_table_is_visible可用于表,视图,索引等
 postgres=> select pg_table_is_visible('t'::regclass);
 pg_table_is_visible 
---------------------
 t
(1 row)

postgres=> SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
                 relname                 
-----------------------------------------
 pg_statistic
 pg_type

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
安全 关系型数据库 MySQL
|
6天前
|
关系型数据库 MySQL
MySQL 添加用户,分配权限
MySQL 添加用户,分配权限
11 0
|
23天前
|
安全 关系型数据库 MySQL
MySQL装机全攻略:从下载到安全配置的详细指南
出于安全考虑,建议禁止root用户通过远程连接登录MySQL数据库。可以通过修改用户权限或配置防火墙规则来实现。 创建新用户并授权: 根据实际需求,创建具有不同权限的用户账户,并为他们分配必要的数据库和表权限。这样既可以满足业务需求,又可以降低安全风险。
|
1月前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
2月前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
安全 关系型数据库 MySQL
MySQL权限管理大揭秘:用户、组、权限解析
MySQL权限管理大揭秘:用户、组、权限解析
97 0
|
2月前
|
关系型数据库 MySQL Linux
Linux下mysql添加用户并授权数据库权限
Linux下mysql添加用户并授权数据库权限
125 0
|
3月前
|
安全 关系型数据库 MySQL
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
node实战——后端koa结合jwt连接mysql实现权限登录(node后端就业储备知识)
66 3
|
3月前
|
存储 关系型数据库 MySQL
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
|
3月前
|
存储 关系型数据库 MySQL
linux安装MySQL8.0,密码修改权限配置等常规操作详解
linux安装MySQL8.0,密码修改权限配置等常规操作详解
146 0