我从来没有找到在生产中的特权端口上运行 Postgresql 的建议。关于安全性和最佳实践,应该在生产中使用什么类型的端口?
da99's questions
如果我创建一个新的database cluster
(通过 initdb),则创建一个新的database
. “默认权限”和“全局默认权限”是如何实现的?
例如,当我\ddp
在 psql 中运行时,它没有显示任何行。这是否意味着 ALTER DEFAULT PRIVILEGES
在某处添加/删除表中的行?
我尝试了各种方法pg_temp
在手册中搜索,但找不到。是否记录在手册中?
PG 文档提供了这个带有 search_path 的正确编写的安全定义器函数示例:
CREATE FUNCTION check_password(uname TEXT, pass TEXT)
RETURNS BOOLEAN AS $$
DECLARE passed BOOLEAN;
BEGIN
SELECT (pwd = $2) INTO passed
FROM pwds
WHERE username = $1;
RETURN passed;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER
-- Set a secure search_path: trusted schema(s), then 'pg_temp'.
SET search_path = admin, pg_temp;
我不明白这部分:
但是如果没有 SET 子句,或者 SET 子句仅提及 admin,则可以通过创建名为 pwds 的临时表来破坏该功能。
如果admin.pwds
存在且search_path
设置为admin
only,怎么可能pwds
恶意创建临时表 , ?
以下内容来自https://www.postgresql.org/docs/current/static/creating-cluster.html,最初强调before
:
或者在运行 initdb 之后但在首次启动服务器之前修改生成的 pg_hba.conf 文件。
手册上这样说是为了防止未经授权的用户访问安全性差的 PG 服务器吗?pg_hba.conf
或者在第一次启动服务器之前应该编辑文件的其他原因?
我有时会遇到这种SELECT
说法(在 stackexchanges 上与 JSON 相关的答案中):
SELECT my_table
FROM my_table;
它似乎变成了一个多行的单列结果。
返回的每一行的类型名称是什么?一个row value of my_table
?
(我试着阅读文档(sql-expressions)但是,我找不到具体的答案。)
PostgreSQL 有vacuum
而 InnoDB 有purge
. TokuDB 是否有任何必需的维护/清理操作?我在在线文档中找不到任何内容:https ://www.percona.com/software/mysql-database/percona-tokudb