HashData 关于表的访问权限的问题

背景:我们有时候可能希望将 shema 中的现有表以及未来创建的表的 select 权限分配给用户。

在 PostgreSQL 9.0 及以后版本新增了 ALL TABLES IN SCHEMA 语法,是可以实现以上功能需求的。

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

目前(180411) HashData 的版本是基于

 PostgreSQL 8.2.15 (Greenplum Database 4.3.99.00 build frozen) (HashData Warehouse 1.4.0.0 build 1085) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) compiled on Jan 11 2018 18:11:55

在 PostgreSQL 8.2.15 中 https://www.postgresql.org/docs/8.2/static/sql-grant.html 可以发现是不支持 ALL TABLES IN SCHEMA 语法的。

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] tablename [, ...]
    TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

因此目前我们没办法将 schema 中未来创建的表的访问权限自动赋予给用户的。只能人工赋予权限。

GRANT SELECT ON MYSCHEMA.NEW_TABLE TO MYUSER;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`g_hash_table_new_full` 是 GLib 中的一个函数,用于创建一个新的哈希。它与 `g_hash_table_new` 类似,但是可以指定两个回调函数来释放哈希中的 key 和 value。 函数原型如下: ```c GHashTable* g_hash_table_new_full(GHashFunc hash_func, GEqualFunc key_equal_func, GDestroyNotify key_destroy_func, GDestroyNotify value_destroy_func); ``` 参数说明: - `hash_func`:哈希函数,用于计算 key 的哈希值。 - `key_equal_func`:key 比较函数,用于判断两个 key 是否相等。 - `key_destroy_func`:key 销毁函数,用于释放哈希中的 key。 - `value_destroy_func`:value 销毁函数,用于释放哈希中的 value。 函数返回一个 `GHashTable` 类型的指针,示创建的哈希。如果创建失败,则返回 NULL。使用完毕后,需要调用 `g_hash_table_destroy` 函数销毁哈希。 示例: ```c // 定义 key 和 value 的结构体 typedef struct { char* key; int value; } HashData; // 定义 key 的哈希函数 guint key_hash(gconstpointer key) { return g_str_hash((gchar*)key); } // 定义 key 的比较函数 gboolean key_equal(gconstpointer a, gconstpointer b) { return g_strcmp0((gchar*)a, (gchar*)b) == 0; } // 定义 key 的销毁函数 void key_destroy(gpointer data) { g_free(data); } // 定义 value 的销毁函数 void value_destroy(gpointer data) { g_slice_free(HashData, data); } int main() { GHashTable* hash_table = g_hash_table_new_full(key_hash, key_equal, key_destroy, value_destroy); // 向哈希中插入数据 HashData* data1 = g_slice_new(HashData); data1->key = g_strdup("key1"); data1->value = 1; g_hash_table_insert(hash_table, data1->key, data1); HashData* data2 = g_slice_new(HashData); data2->key = g_strdup("key2"); data2->value = 2; g_hash_table_insert(hash_table, data2->key, data2); // 从哈希中查找数据 HashData* data3 = g_hash_table_lookup(hash_table, "key1"); if (data3 != NULL) { printf("value: %d\n", data3->value); } // 销毁哈希 g_hash_table_destroy(hash_table); } ``` 在上述示例中,我们定义了一个结构体 `HashData`,其中包含 key 和 value 两个字段。我们使用 `g_hash_table_new_full` 函数创建了一个哈希,指定了 key 的哈希函数、比较函数和销毁函数,以及 value 的销毁函数。然后向哈希中插入了两条数据,通过 `g_hash_table_lookup` 函数查找了一条数据,并在最后调用了 `g_hash_table_destroy` 函数销毁了哈希

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值