gpt4 book ai didi

sql - 是否可以通过 SQL SELECT 语句更改数据库?

转载 作者:行者123 更新时间:2023-11-29 13:02:56 25 4
gpt4 key购买 nike

我们希望允许管理员(仅)通过 Web UI 执行 SQL SELECT 语句。请注意,管理员可以查看数据库中的所有信息。

这种方法有哪些安全风险?是否可以通过 SQL SELECT 语句(任何记录或表)以某种方式更改数据库?

已添加

RDBMS 是 PostgreSQL

最佳答案

We want to allow to an administrator (only) to execute an SQL SELECT statement via Web UI. Please note that the administrator is allowed to view all information in a database.

What are security risks with this approach? Is it possible to change somehow a database by SQL SELECT statement (any record or table)?

那么,您建议如何让他们执行SELECT 语句? PostgreSQL 没有用户级语句权限,它对单个数据库对象有权限。

理论上,您完全可以使用SELECT 修改数据库。看看 PostgreSQL 的函数列表就知道了。更不用说用户定义的函数了。最明显的例子当然是nextval,它推进一个序列,或者setval,它设置一个序列的位置。

但是,一切都需要对相关数据库对象的权限。如果您仅GRANT 表(或列表的某些子集)的SELECT 权限,则用户将无法直接修改该表中的数据。 PostgreSQL 也不提供绕过内置限制的功能。因此,只需创建一个仅对某些表具有 SELECT 权限并且对其所在架构具有 USAGE 权限的用户就可以了。

不过有一些重要的注意事项。 SECURITY DEFINER 用户定义的函数可以做定义用户可以做的任何事情 所以如果你有 SECURITY DEFINER 用户定义的函数但没有仔细编写你可能已经打开了安全漏洞。用 C 编写的用户定义函数也是如此——因此请仔细考虑您的扩展。最后,你需要非常小心任何用“不受信任”的语言编写的函数,如 plpython、plperl 等(与沙盒中的 plperlu 相对),因为必须小心实现这些函数以确保调用用户无法欺骗它们做他们不应该做的事情。

如果您打算授予用户直接访问权限以编写原始 SQL,您必须更加小心地保护您的数据库。不要GRANT 权限给public,并且在默认情况下REVOKE 他们。检查 security definer 函数以确保它们定义了 SET search_path 选项。等等。这通常是安全的,但前提是您要小心。

关于sql - 是否可以通过 SQL SELECT 语句更改数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23754663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com