Odpowiedzi:
W przypadku logowania bez hasła:
sudo -u user_name psql db_name
Aby zresetować hasło, jeśli zapomniałeś:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
... z jakiegoś powodu google wskazywał mnie tutaj, kiedy googlowałem :)
Następnie wpisz:
$ sudo -u postgres psql
Następnie:
\password postgres
Następnie, aby wyjść psql
:
\q
Jeśli to nie zadziała, ponownie skonfiguruj uwierzytelnianie.
Edytuj /etc/postgresql/9.1/main/pg_hba.conf
(ścieżka będzie się różnić) i zmień:
local all all peer
do:
local all all md5
Następnie uruchom ponownie serwer:
$ sudo service postgresql restart
\p
, daje mi hasło; jeśli \password postgres
\p extra argument "assword" ignored; \p extra argument "postgres" ignored
sudo passwd postgres
Możesz i powinieneś zaszyfrować hasło użytkownika:
ALTER USER username WITH ENCRYPTED PASSWORD 'password';
The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
Uważam, że najlepszym sposobem na zmianę hasła jest po prostu użycie:
\password
w konsoli Postgres.
Źródło:
Należy zachować ostrożność przy określaniu niezaszyfrowanego hasła za pomocą tego polecenia. Hasło zostanie przesłane do serwera w postaci czystego tekstu i może być również zarejestrowane w historii poleceń klienta lub w dzienniku serwera. psql zawiera polecenie \ hasło, którego można użyć do zmiany hasła roli bez ujawniania hasła w postaci czystego tekstu.
z https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .
\password username
Aby zmienić hasło za pomocą wiersza polecenia systemu Linux, użyj:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Aby zmienić hasło
sudo -u postgres psql
następnie
\password postgres
teraz wprowadź Nowe hasło i potwierdź
następnie \q
wyjść
Przejdź do konfiguracji Postgresql i edytuj pg_hba.conf
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
Następnie zmień tę linię:
Database administrative login by Unix domain socket
local all postgres md5
do :
Database administrative login by Unix domain socket
local all postgres peer
następnie ponownie uruchom usługę PostgreSQL za pomocą komendy SUDO
psql -U postgres
Zostaniesz teraz wpisany i zobaczysz terminal Postgresql
następnie wprowadź
\password
i wprowadź NOWE hasło dla domyślnego użytkownika Postgres. Po pomyślnej zmianie hasła ponownie przejdź do strony pg_hba.conf i przywróć zmianę na „md5”
teraz będziesz zalogowany jako
psql -U postgres
z nowym hasłem.
Daj mi znać, jeśli znajdziesz w tym jakiś problem.
user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
$version,' /usr/bin/psql: psql: line 26:
my ($ wersja, $ klaster, $ db, $ port , $ host); ' dzięki za pomoc!
Konfiguracja, którą mam na moim serwerze, była bardzo spersonalizowana i udało mi się zmienić hasło dopiero po ustawieniu uwierzytelnienia zaufania w pg_hba.conf
pliku :
local all all trust
Nie zapomnij zmienić tego z powrotem na hasło lub md5
sudo systemctl restart postgresql.service
To był pierwszy wynik w Google, kiedy szukałem sposobu na zmianę nazwy użytkownika, więc:
ALTER USER <username> WITH PASSWORD '<new_password>'; -- change password
ALTER USER <old_username> RENAME TO <new_username>; -- rename user
Kilka innych poleceń pomocnych w zarządzaniu użytkownikami:
CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
Przenieś użytkownika do innej grupy
ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
W moim przypadku na Ubuntu 14.04 zainstalowany z postgres 10.3. Muszę wykonać następujące kroki
su - postgres
zmienić użytkownika na postgres
psql
aby wprowadzić powłokę postgres\password
następnie wprowadź swoje hasło\q
wyjść z sesji powłokiNastępnie przełączasz się z powrotem na root, wykonując exit
i konfigurując swój pg_hba.conf
(mój jest w /etc/postgresql/10/main/pg_hba.conf
), upewniając się, że masz następujący wiersz
local all postgres md5
service postgresql restart
postgres
użytkownika i ponownie wprowadź powłokę postgres. Poprosi Cię o hasło.Użyj tego:
\password
wprowadź nowe hasło dla tego użytkownika, a następnie je potwierdź. Jeśli nie pamiętasz hasła i chcesz je zmienić, możesz zalogować się jako postgres, a następnie użyć tego:
ALTER USER 'the username' WITH PASSWORD 'the new password';
Podobne do innych odpowiedzi w składni, ale należy wiedzieć, że można również przekazać hasło md5, aby nie przesyłać hasła w postaci zwykłego tekstu.
Oto kilka scenariuszy niezamierzonych konsekwencji zmiany hasła użytkownika zwykłym tekstem.
log_statement = ddl
lub nowszych, hasło w postaci zwykłego tekstu pojawi się w dziennikach błędów.
To powiedziawszy tutaj, w jaki sposób możemy zmienić hasło użytkownika, budując md5 hasła.
np .: „md5” + md5 (hasło + nazwa użytkownika)
W bash:
~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
md5d6a35858d61d85e4a82ab1fb044aba9d
[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($_.ToString("x2"))
}
$StringBuilder.ToString();
## OUTPUT
md5d6a35858d61d85e4a82ab1fb044aba9d
ALTER USER
polecenie będzie wyglądać ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
Hasło jest zawsze przechowywane w postaci zaszyfrowanej w katalogach systemowych. Słowo kluczowe ZASZYFROWANE nie ma żadnego efektu, ale jest akceptowane dla kompatybilności wstecznej. Metodę szyfrowania określa parametr konfiguracyjny hasło_szyfrowanie. Jeśli prezentowany ciąg hasła jest już w formacie zaszyfrowanym MD5 lub SCRAM, jest on przechowywany w niezmienionej postaci niezależnie od hasła_szyfrowania (ponieważ system nie może odszyfrować określonego zaszyfrowanego ciągu hasła, aby zaszyfrować go w innym formacie). Umożliwia to ponowne załadowanie zaszyfrowanych haseł podczas zrzutu / przywracania.
Zasadniczo wystarczy użyć interfejsu administratora pg do wykonywania czynności związanych z db.
Jeśli zamiast tego skupiasz się bardziej na automatyzacji konfiguracji bazy danych na potrzeby rozwoju lokalnego, CI itp.
Na przykład możesz użyć prostej kombinacji takiej jak ta.
(a) Utwórz manekina superużytkownika za pomocą Jenkinsa za pomocą polecenia podobnego do tego:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
spowoduje to utworzenie superużytkownika o nazwie eksperyment001 w tobie postgres db.
(b) Podaj temu użytkownikowi hasło, uruchamiając NON-Interactive SQL polecenie.
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
Postgres jest prawdopodobnie najlepszą dostępną bazą danych dla narzędzi wiersza poleceń (nieinteraktywnych). Tworzenie użytkowników, uruchamianie SQL, tworzenie kopii zapasowych baz danych itp. Ogólnie rzecz biorąc, jest to dość proste w postgresie i ogólnie dość trywialne jest zintegrowanie tego ze skryptami instalacyjnymi lub automatyczną konfiguracją CI.
oraz w pełni zautomatyzowany sposób z bash'iem i spodziewaj się ( w tym przykładzie zapewniamy nowego administratora postgres z nowo udostępnionym postgres pw zarówno na poziomie systemu operacyjnego, jak i postgres)
# 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 ;
"
TLDR:
W wielu systemach konto użytkownika często zawiera kropkę lub jakąś funkcję (użytkownik: john.smith, horise.johnson). W takich przypadkach konieczne będzie dokonanie modyfikacji powyższej akceptowanej odpowiedzi. Zmiana wymaga podania podwójnego cudzysłowu.
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
Racjonalny:
Postgres jest dość wybredny, kiedy stosować „podwójny cytat”, a kiedy „pojedynczy cytat”. Zazwyczaj przy podawaniu łańcucha użyłbyś pojedynczego cudzysłowu.