dan*_*sky 5 schema postgresql permissions
这是我建议的架构:
CREATE TABLE Surveys (
id serial primary key,
user_email citext,
survey_data jsonb,
created_at timestamp default current_timestamp
);
CREATE INDEX surveys_email_idx ON Surveys(user_email);
CREATE USER SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
我知道我需要:
GRANT INSERT ON dbname.Surveys TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
但我还需要:
GRANT INSERT, UPDATE ON dbname.surveys_email_idx to SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
还有什么我没有想到的吗?
您不能GRANT在索引上使用。索引没有单独的权限,它们是所属表的“实现细节”。
您已经涵盖了INSERT特权(作为表所有者或超级用户):
GRANT INSERT ON dbname.surveys TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
如果您希望角色登录,则它需要访问数据库。
GRANT CONNECT ON DATABASE my_database TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
另外,角色需要LOGIN特权。CREATE USER隐含地这样做。手册:
CREATE USER现在是 的别名CREATE ROLE。唯一的区别是,当命令拼写为CREATE USER,LOGIN默认情况下, [...]
并在pg_hba.conf.
(否则您可能想SET ROLE改用。)
您至少需要USAGE架构 - 默认情况下在public架构中给出,除非您撤销它。您示例中的架构具有(误导!)名称“dbname”。所以:
GRANT USAGE ON SCHEMA dbname TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
你不会混淆数据库和模式,是吗?看:
由于您使用 a serial,因此您至少还需要在USAGE已连接的SEQUENCE:
GRANT USAGE ON SEQUENCE public.surveys_id_seq TO SurveyWriter;
Run Code Online (Sandbox Code Playgroud)
或者考虑使用IDENTITY不需要单独权限的列。需要 Postgres 10 或更高版本。看:
有关的:
旁白 1:在任何地方
使用合法的小写名称以避免混淆。SurveyWriter将被创建为surveywriter. 我建议survey_writer改为。看:
旁白2:
考虑timestamp with time zone:created_at timestamptz DEFAULT current_timestamp。看:
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |