mysql 权限与安全

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: --创建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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
|
20天前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
209 7
|
11月前
|
SQL NoSQL 关系型数据库
|
11月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
1834 1
|
12月前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
169 4
|
安全 关系型数据库 MySQL
Navicat工具设置MySQL权限的操作指南
通过上述步骤,您可以使用Navicat有效地为MySQL数据库设置和管理用户权限,确保数据库的安全性和高效管理。这个过程简化了数据库权限管理,使其既直观又易于操作。
1066 4
|
关系型数据库 MySQL Linux
在Linux中,新安装mysql后怎样提升mysql的安全级别?
在Linux中,新安装mysql后怎样提升mysql的安全级别?
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
1376 17
|
安全 关系型数据库 MySQL
MySQL装机全攻略:从下载到安全配置的详细指南
出于安全考虑,建议禁止root用户通过远程连接登录MySQL数据库。可以通过修改用户权限或配置防火墙规则来实现。 创建新用户并授权: 根据实际需求,创建具有不同权限的用户账户,并为他们分配必要的数据库和表权限。这样既可以满足业务需求,又可以降低安全风险。
|
关系型数据库 MySQL
MySQL 添加用户,分配权限
MySQL 添加用户,分配权限
223 0

推荐镜像

更多