You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中如何按前缀批量授予视图SELECT权限?

正确操作方式

不同数据库对批量授权带前缀视图的语法支持不一样,你之前的语句没法直接生效,以下是主流数据库的可行方案:

MySQL/MariaDB

  1. 先执行查询生成所有需要授权的语句:
SELECT CONCAT('GRANT SELECT ON `', table_schema, '`.`', table_name, '` TO \'<role/user>\';')
FROM information_schema.views
WHERE table_name LIKE 'my_view_%';
  1. 把查询结果里的SQL语句复制出来直接执行,就能完成批量授权。如果想自动执行,也可以用预处理语句:
SET @sql = NULL;
SELECT GROUP_CONCAT('GRANT SELECT ON `', table_schema, '`.`', table_name, '` TO \'<role/user>\';' SEPARATOR ' ')
INTO @sql
FROM information_schema.views
WHERE table_name LIKE 'my_view_%';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

注意替换<role/user>为实际的角色或用户名,同时确保你有足够权限执行这些操作。

PostgreSQL

PostgreSQL没有直接的LIKE过滤批量授权语法,得用动态SQL实现:

DO $$
DECLARE
    rec RECORD;
BEGIN
    FOR rec IN SELECT table_schema, table_name
               FROM information_schema.views
               WHERE table_name LIKE 'my_view_%'
    LOOP
        EXECUTE format('GRANT SELECT ON %I.%I TO <role/user>;', rec.table_schema, rec.table_name);
    END LOOP;
END $$;

替换<role/user>为目标角色即可。如果视图都在特定模式下,可以加上AND table_schema = 'public'(比如public模式)缩小范围。

SQL Server

同样需要生成动态SQL来批量授权:

DECLARE @sql NVARCHAR(MAX) = '';

SELECT @sql += 'GRANT SELECT ON ' + QUOTENAME(table_schema) + '.' + QUOTENAME(table_name) + ' TO <role/user>; '
FROM information_schema.views
WHERE table_name LIKE 'my_view_%';

EXEC sp_executesql @sql;

替换<role/user>为实际的用户或角色,执行后就会给所有符合前缀的视图授予SELECT权限。


内容的提问来源于stack exchange,提问作者Priya d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:09:27