Как изменить пароль пользователя PostgreSQL?

Я не уверен, что это официально задокументировано, но вы можете имитировать замедленное расширение с помощью инструкции call:

@echo off
FOR /R %%X IN (*.txt) DO (
  set temp=%%~nX
  call echo directory %%temp:~0,7%%
)

Удвоение знака процента отменяет замену переменных на вторую оценку. Однако отсроченное расширение намного проще.

795
задан Eugene Dolgoff 23 February 2018 в 15:47
поделиться

3 ответа

Подобный другим ответам в синтаксисе, но нужно быть известно, что можно также передать md5 пароля, таким образом, Вы не передаете незашифрованный пароль.

Вот несколько сценариев непреднамеренных последствий изменения пользовательского пароля в простом тексте.

  1. , Если Вы не имеете SSL и изменяете удаленно, Вы передаете незашифрованный пароль по сети.
  2. , Если у Вас есть своя конфигурация модели входа для входа Операторов DDL log_statement = ddl или выше, затем незашифрованный пароль обнаружится в журналах ошибок.
    1. , Если Вы не защищаете эти журналы, это - проблема.
    2. , Если Вы собираете эти журналы/ETL их и отображаете их, где у других есть доступ, они могли закончить тем, что видели этот пароль, и т.д.
    3. , Если Вы позволяете пользователю управлять их паролем, они невольно показывают пароль администратору или низкоуровневому сотруднику, для которого определяют задачу с рассмотрением журналов.

После этих слов вот то, как мы можем изменить пароль пользователя путем создания md5 пароля.

  • Пост-ГРЭС, когда хеш пароль как md5, солит пароль с именем пользователя, затем предварительно ожидает текст "md5" к получающемуся хешу.
  • исключая: "md5" +md5 (пароль + имя пользователя)

  • В ударе:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • В PowerShell:
    [PSCredential] $Credential = Get-Credential

    $StringBuilder = New-Object System.Text.StringBuilder

    $null = $StringBuilder.Append('md5');

    [System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
        $null = $StringBuilder.Append(

Подобный другим ответам в синтаксисе, но нужно быть известно, что можно также передать md5 пароля, таким образом, Вы не передаете незашифрованный пароль.

Вот несколько сценариев непреднамеренных последствий изменения пользовательского пароля в простом тексте.

  1. , Если Вы не имеете SSL и изменяете удаленно, Вы передаете незашифрованный пароль по сети.
  2. , Если у Вас есть своя конфигурация модели входа для входа Операторов DDL log_statement = ddl или выше, затем незашифрованный пароль обнаружится в журналах ошибок.
    1. , Если Вы не защищаете эти журналы, это - проблема.
    2. , Если Вы собираете эти журналы/ETL их и отображаете их, где у других есть доступ, они могли закончить тем, что видели этот пароль, и т.д.
    3. , Если Вы позволяете пользователю управлять их паролем, они невольно показывают пароль администратору или низкоуровневому сотруднику, для которого определяют задачу с рассмотрением журналов.

После этих слов вот то, как мы можем изменить пароль пользователя путем создания md5 пароля.

  • Пост-ГРЭС, когда хеш пароль как md5, солит пароль с именем пользователя, затем предварительно ожидает текст "md5" к получающемуся хешу.
  • исключая: "md5" +md5 (пароль + имя пользователя)

  • В ударе:

[110]
  • В PowerShell:
[111]
  • Поэтому наконец наш ALTER USER команда будет похожа
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Необходимые ссылки (Обратите внимание, что я только свяжусь с последними версиями документов для более старого, она изменяет некоторых, но md5 является все еще поддержкой пути назад.)
  • создают роль
  • , пароль всегда хранится зашифрованный в системных каталогах. ЗАШИФРОВАННОЕ ключевое слово не имеет никакого эффекта, но принято для назад совместимости. Метод шифрования определяется параметром конфигурации password_encryption. Если представленная строка пароля уже находится в MD5-зашифрованном или ВЫМЕТАТЬСЯ-ЗАШИФРОВАННОМ-ФОРМАТЕ, то это хранится как есть независимо от password_encryption (так как система не может дешифровать указанную строку зашифрованного пароля, для шифрования его в другом формате). Это позволяет перезагружать зашифрованных паролей во время дампа/восстановления.

  • параметр конфигурации для пароль md5
пост-ГРЭС здания документа
  • аутентификации по паролю пост-ГРЭС password_encryption .ToString("x2")) } $StringBuilder.ToString(); ## OUTPUT md5d6a35858d61d85e4a82ab1fb044aba9d
    • Поэтому наконец наш ALTER USER команда будет похожа
        ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
    
    • Необходимые ссылки (Обратите внимание, что я только свяжусь с последними версиями документов для более старого, она изменяет некоторых, но md5 является все еще поддержкой пути назад.)
    • создают роль
    • , пароль всегда хранится зашифрованный в системных каталогах. ЗАШИФРОВАННОЕ ключевое слово не имеет никакого эффекта, но принято для назад совместимости. Метод шифрования определяется параметром конфигурации password_encryption. Если представленная строка пароля уже находится в MD5-зашифрованном или ВЫМЕТАТЬСЯ-ЗАШИФРОВАННОМ-ФОРМАТЕ, то это хранится как есть независимо от password_encryption (так как система не может дешифровать указанную строку зашифрованного пароля, для шифрования его в другом формате). Это позволяет перезагружать зашифрованных паролей во время дампа/восстановления.

    • параметр конфигурации для пароль md5
    пост-ГРЭС здания документа
  • аутентификации по паролю пост-ГРЭС password_encryption
    3
    ответ дан 22 November 2019 в 21:08
    поделиться

    и полностью автоматизированный путь с ударом и ожидает ( в этом примере , мы настраиваем нового администратора пост-ГРЭС с недавно настроенной пост-ГРЭС pw и на ОС и на уровне времени выполнения пост-ГРЭС)

      # the $postgres_usr_pw and the other bash vars MUST be defined 
      # for reference the manual way of doing things automated with expect bellow
      #echo "copy-paste: $postgres_usr_pw"
      #sudo -u postgres psql -c "\password"
      # the OS password could / should be different
      sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd
    
      expect <<- EOF_EXPECT
         set timeout -1
         spawn sudo -u postgres psql -c "\\\password"
         expect "Enter new password: "
         send -- "$postgres_usr_pw\r"
         expect "Enter it again: "
         send -- "$postgres_usr_pw\r"
         expect eof
    EOF_EXPECT
    
      cd /tmp/
      # at this point the postgres uses the new password
      sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
        --port $postgres_db_port --host $postgres_db_host -c "
      DO \$\$DECLARE r record;
         BEGIN
            IF NOT EXISTS (
               SELECT
               FROM   pg_catalog.pg_roles
               WHERE  rolname = '"$postgres_db_useradmin"') THEN
                  CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
                  CREATEDB REPLICATION BYPASSRLS 
     PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
            END IF;
         END\$\$;
      ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
      CREATEDB REPLICATION BYPASSRLS 
    PASSWORD  '"$postgres_db_useradmin_pw"' LOGIN ;
     "
    
    0
    ответ дан 22 November 2019 в 21:08
    поделиться

    В целом просто используйте pg администратора UI для того, чтобы сделать связанное с дб действие.

    , Если вместо этого Вы фокусируетесь больше в автоматизации установки базы данных для Вашей локальной разработки или CI и т.д.

    , Например, можно использовать простую комбинацию как это.

    (a) Создают фиктивный суперпользователь через jenkins с командой, подобной этому:

    docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
    

    это создаст суперпользователь, названный experiment001 в Вас дб пост-ГРЭС.

    (b) Дают этому пользователю некоторый пароль путем выполнения команды NON-Interactive SQL.

    docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
    

    Пост-ГРЭС, вероятно, лучшая база данных там для командной строки (неинтерактивные) инструменты. При создании пользователей, рабочего SQL, создании резервного копирования базы данных и т.д. В целом, это является все довольно основным с пост-ГРЭС и это в целом довольно тривиально для интеграции этого в сценарии установки разработки или в автоматизированную конфигурацию CI.

    0
    ответ дан 22 November 2019 в 21:08
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: