Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PostgreSQL:隐藏表、插入、更新、删除函数后面

PostgreSQL:隐藏表、插入、更新、删除函数后面
EN

Stack Overflow用户
提问于 2017-11-21 01:39:42
回答 1查看 313关注 0票数 0

我了解如何使用GRANT来控制谁可以对DB对象做什么。

在这种情况下,有一些特定的函数可以修改表的内容,同时防止用户直接访问表。

假设我有一个库存控制表,我想要一个只修改一个列的函数increase_stock(int)。还会有其他函数修改其他列。

我的实际表中有ltree数组和ints数组,这使得触发器成为一种不受欢迎的选项,因为这样做并不能清晰地直接操作一个字段,而无需测试每个字段上的更改。更重要的是,它没有创建我想要的API。

不管采用何种方法,我是否可以创建一个用户可以看到的函数,而该函数访问的表对该用户来说是不可见的?

我用的是PG 10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-21 01:48:35

下面是一个关于select的例子。insert.update和delete的情况大致相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t=# create table sd(i int);
CREATE TABLE
t=# insert into sd select 1;
INSERT 0 1
t=# create user nr;
CREATE ROLE
t=# create function s() returns table (i int) as $$ 
begin
return query select * from sd;
end;
$$ language plpgsql security definer;
CREATE FUNCTION

现在以nr身份登录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-bash-4.2$ psql -U nr t
psql (9.3.14)
Type "help" for help.

t=> select * from sd;
ERROR:  permission denied for relation sd
t=> select * from s();
 i
---
 1
(1 row)

https://www.postgresql.org/docs/current/static/sql-createfunction.html

安全调用程序表示函数将以调用它的用户的权限执行。这是默认的。安全定义器指定使用拥有该函数的用户的权限执行该函数。

当然,这意味着函数所有者需要对关系的权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47409780

复制
相关文章
让DNS运行在容器中
在这里主要使用的容器的镜像是基于bind的,在其中封装了图形界面,从而可以在界面上直接进行配置相关的参数。
SRE运维实践
2019/07/08
7610
运行在 macOS 中的 Linux —— multipass 方案
注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
宋天伦
2023/10/21
3420
运行在 macOS 中的 Linux —— OrbStack 方案
OrbStack) 是在 macOS 上运行 Docker 容器和 Linux 机器的快速、轻量级和简单的方式。它是一个超级充电版 WSL 和 Docker 桌面替代品,所有这些都在一个易于使用的应用程序中实现。
宋天伦
2023/10/21
2.2K0
运行在“Ring -3” 的 MINIX
你可能不知道,但是在你的英特尔系统里,除了你的主操作系统之外,还有一个操作系统在运行,这就是 MINIX。
py3study
2020/01/14
4860
NET MVC接口服务如何运行在容器中
  有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。 
欢醉
2023/03/01
1K0
NET MVC接口服务如何运行在容器中
有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。
欢醉
2023/02/20
1.2K0
运维安全中的“福尔摩斯”
引 言 随着互联网技术的发展,信息的交互越来越频繁,随之而来信息的安全、运维操作的合规性等等问题越来越多,其对于企业内部管理来说要求越来越高。2015年某某网宕机事件,由于内部人员的越权操作,导致该网及APP全线瘫痪约12小时,直接损失近1200万美元;2016年,杭州男子曹某某,利用工作用的运维账号,窃取浙60万学生信息贩卖给他人。 其实,我们的一些客户在使用堡垒机的过程中,可能也会碰到类似的事件,并且都通过堡垒机找到了相关的作案人员,下面我们分享三个发生过的案例 案例一 误操作导致主机异常 某政务网客
安恒信息
2018/04/10
1.5K0
运维安全中的“福尔摩斯”
运维中的接入管理梳理
数据库层的接入可以提炼出DAO层,通过工厂模式来提供灵活的配置接入,这会是一个通用的接口,同时其他数据库的接入也可以通过这种方式带来接入,提炼的结果就是对于数据库类型和接入方式,即可完成数据库的接入管理,比如MySQL,我只需要输入mysql.mysqldb的方式即可通过mysqldb库的方式接入MySQL
jeanron100
2018/07/26
1.5K0
运维中的接入管理梳理
.NET - Task.Run vs Task.Factory.StartNew
在 .NET 4 中,Task.Factory.StartNew 是安排新任务的首选方法。它有许多重载提供了高度可配置的机制,通过启用设置选项,可以传递任意状态、启用取消,甚至控制调度行为。所有这些功能的另一面是复杂性。您需要知道什么时候使用哪个重载、提供什么调度程序等等。另外,Task.Factory.StartNew 用起来并不直截干脆,至少对于它的一些使用场景来说还不够快,比如它的主要使用场景——轻松地将工作交付到后台处理线程。
独立观察员
2022/12/06
4280
C# Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。可以认为 Task.Run 是简化的 Task.Factory.StartNew 的使用,除了需要指定一个线程是长时间占用的,否则就使用 Task.Run。
zls365
2021/01/13
1.3K0
Task.Run 和 Task.Factory.StartNew 区别——c#
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。
vv彭
2021/01/06
1.4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
Python 作为当前机器学习中使用最多的一门编程语言,有很多对应的机器学习库,最常用的莫过于 scikit-learn 了。我们介绍下如何使用sklearn进行实时预测。先来看下典型的机器学习工作流。
abs_zero
2018/07/25
4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
从信息化时代到互联网时代,再到如今大幕初启的数字化时代,IT、互联网和移动化已经渗透到工作和生活的方方面面。今年早些时候一群歪果仁评选出中国的新“四大发明”——高铁、网购、支付宝和共享单车,后三样都是来自于IT变革。而运维作为IT运行的有力保障,在不同时期和不同类型的企业中正在发挥着越来越大的支撑和引领作用,今天就让我们聊聊信息化时代的传统运维、互联网时代的互联网运维和数字化时代的业务运维有什么不同!
智能运维圈
2021/05/11
3.5K0
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
linux中iostat命令_linux运维和网络运维
Linux系统中的iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
全栈程序员站长
2022/11/08
9.7K0
linux运维中的命令梳理(三)
----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数
洗尽了浮华
2018/01/23
8.1K0
linux运维中的命令梳理(一)
在linux日常运维中,我们平时会用到很多常规的操作命令。 ------------------------------------------------------- 在修改文件后,执行下面操作进行代码提交到git: git add . git status #查看修改了哪些文件信息 git commit -m "edit message"
洗尽了浮华
2018/01/23
7.5K0
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.5K0
linux运维中的命令梳理(二)
回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html 今天在这里,详细总结下运维工作中常常用到的一些操作命令(依据本人使用经验而言): ----------文件系统结构和基本操作命令---------- chmod命令:改变权限 常用用法:chmod -R xxxx FILE 含义:设置文件或者目录的权限属性,加上R选项,表示递归设置目录下文件和目录的权限属性 上
洗尽了浮华
2018/01/23
5.6K0
linux运维中的命令梳理(二)
Rails框架流行在他的设计理念
这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念: 1、make simple thing easy and make complex possible -让简单的事情变的容易,同时让复杂的事情的实现成为可能。 2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic,还有微软ASP.NET Team正在做的
张善友
2018/01/30
2K0
点击加载更多

相似问题

在XSL :apply-模板中使用xsl变量作为Xpath值

11

xsl:apply-模板正确放置

10

xsl:template /xsl:apply-模板移除子节点

11

xsl apply-转换后递归地使用模板

13

xsl:apply-模板中的select属性

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文