使用bash向PostgreSQL角色授予只读权限

时间:2018-09-25 16:20:06

标签: bash postgresql psql

使用bash脚本,我试图为PostgreSQL角色设置只读权限:

使用psql函数调用pgexec命令:

pgexec() {
    local cmd=$1
    sudo -u postgres psql  -c "$cmd" 
}

我将以上功能用于多个psql命令(一行或多行)

function set_permissions(){
...
    if [[ $permissions == read ]]
        then
            output=$(pgexec "GRANT CONNECT ON DATABASE ${database} TO ${role};
                    \c ${database};
                    GRANT USAGE ON SCHEMA ${schema} TO ${role};
                    GRANT SELECT ON ALL TABLES IN SCHEMA ${schema} TO ${role};
                    GRANT SELECT ON ALL SEQUENCES IN SCHEMA ${schema} TO ${role};
                    ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT SELECT ON TABLES TO ${role};
                    ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT SELECT ON SEQUENCES TO ${role};" 2>1)
            if [[ "$?" -eq 0 ]]
                then
                    echo "${role_name} was granted permissions $perm_read"
                    return 0    
                else    
                    echo "Error - $output"
                    return 4    
            fi      
...
}

我得到的结果是

Error - . 

我希望$output返回错误。

我使用了调试,SQL查询看起来还可以

1 个答案:

答案 0 :(得分:1)

output捕获命令的标准输出,但不捕获标准错误。

要捕获标准错误以及标准输出,请使用

output=$(pgexec "..." 2>&1)

您的错误是忽略了&。这样,标准错误最终会存储在名为1的文件中。