我有一个经常被删除并在模式中使用相同名称创建的表。在Vertica中创建表时,如何创建对用户角色的授予访问权限?
P.S:这个问题是vertica特有的,但欢迎所有的想法。同样下降是业务需求,我们甚至无法截断表并清除数据。答案 0 :(得分:0)
不幸的是,Vertica不支持可以对数据库中的任何表或视图运行SELECT语句的固定角色(例如,SQL Server db_datareader角色)。 因此,根据您创建对象的方式(DBA创建,工作流或任何ETL工具),您需要自动执行此操作。 您可以创建一个UDP来为您执行此操作,并在您的作业,脚本,工作流中调用UDP。 您还可以创建UDP以提取实际授权,访问对象,并将其存储在临时文件中,以便在对象重新创建后执行。
但问题是?正在重新创建所需的表格?有什么用?也许有更好的解决方案! @Kermit你必须停止投票!
答案 1 :(得分:0)
重新创建表格时,您必须逐步完成。
1)根据现有授权生成GRANT脚本。 (您需要更改此项以匹配您处理拨款的方式)
select 'GRANT ' || privileges_description || ' ON ' || object_schema || '.' || object_name || ' TO ' || grantee || ';' from grants
where object_schema = 'MYSCHEMA' object_name = 'MYTABLE'
and grantee ilike 'role%';
2)像旧的一样创建新表(确保保存预测!)
CREATE TABLE MYSCHEMA.NEW_MYTABLE LIKE MYSCHEMA.MYTABLE INCLUDING PROJECTIONS;
3)放弃旧桌子
DROP TABLE MYSCHEMA.MYTABLE;
4)重命名新表
ALTER TABLE MYSCHEMA.NEW_MYTABLE RENAME TO MYTABLE;
5)申请生成的拨款
GRANT ROLE_MYROLE TO MYSCHEMA.MYTABLE;