使用 bash 授予 PostgreSQL 角色只读权限
Grant read-only privileges to a PostgreSQL role using bash
使用 bash 脚本我正在尝试为 PostgreSQL 角色设置只读权限:
使用pgexec
函数调用psql
命令:
pgexec() {
local cmd=
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
到 return 错误。
我使用了调试,SQL 查询看起来不错
output
捕获命令的标准输出,但不捕获标准错误。
要捕获标准错误和标准输出,请使用
output=$(pgexec "..." 2>&1)
您的错误是省略了 &
。这样标准错误最终会出现在一个名为 1
.
的文件中
使用 bash 脚本我正在尝试为 PostgreSQL 角色设置只读权限:
使用pgexec
函数调用psql
命令:
pgexec() {
local cmd=
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
到 return 错误。
我使用了调试,SQL 查询看起来不错
output
捕获命令的标准输出,但不捕获标准错误。
要捕获标准错误和标准输出,请使用
output=$(pgexec "..." 2>&1)
您的错误是省略了 &
。这样标准错误最终会出现在一个名为 1
.