Предоставьте права только для чтения роли PostgreSQL с помощью bash - PullRequest
0 голосов
/ 25 сентября 2018

Использование сценариев bash Я пытаюсь установить права доступа только для чтения к роли PostgreSQL:

Команда psql вызывается с использованием функции pgexec:

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

Iиспользуйте приведенную выше функцию для нескольких команд 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 голосов
/ 25 сентября 2018

output перехватывает стандартный вывод вашей команды, но не стандартную ошибку.

Чтобы зафиксировать стандартную ошибку вместе со стандартным выводом, используйте

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

Ваша ошибка состояла в том, чтобы пропустить&.Таким образом, стандартная ошибка заканчивается в файле с именем 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...