Oracle как разблокировать пользователя

Обновлено: 06.07.2024

Это проблема с БД? Когда я временно разблокирую учетную запись пользователя с помощью команды ALTER USER username ACCOUNT UNLOCK , все будет в порядке. Затем через некоторое время снова происходит такая же блокировка учетной записи.

Используемая база данных - oracle XE

Есть ли у кого-нибудь еще такая же проблема?

Одной из причин вашей проблемы может быть используемая вами политика паролей.

И если у вас нет такой политики, проверьте свои настройки свойств пароля в профиле DEFAULT с помощью следующего запроса:

И при необходимости вам просто нужно изменить PASSWORD_LIFE_TIME на unlimited с помощью следующего запроса:

И эта ссылка может быть полезна для решения вашей проблемы. .

Способ разблокировки пользователя:

И откройте новый терминал

  • он спросит новый password:password
  • он попросит повторно ввести password:password
  • нажмите ввод, вы войдете в систему

Вот другое решение, позволяющее разблокировать только заблокированного пользователя . Из журнала командной строки как SYSDBA:

Затем введите следующую команду:

Проверьте параметр PASSWORD_LOCK_TIME . Если установлено значение 1, вы не сможете разблокировать пароль в течение 1 дня даже после того, как введете команду alter user unlock .

Я столкнулся с этой аналогичной проблемой и решил ее, выполнив следующие действия:

  1. Откройте командную строку Windows.
  2. Войдите, используя команду sqlplus "/ as sysdba"
  3. Затем выполнили команду alter user HR identified by password account unlock

Обратите внимание: password - это пароль, который я использовал.

Войдите в клиент SQL Plus на сервере базы данных Oracle.

Введите имя пользователя: система

Введите пароль: пароль [Только если, если вы не меняли пароль по умолчанию при установке БД]

Нажмите Ввод. после чего вы увидите статус подключения.

Теперь попробуйте войти в систему с именем пользователя на клиенте базы данных [sqldeveloper].

Во время установки и создания базы данных, можно разблокировать и сбросить многие из предоставленных Oracle учетных записей пользователей базы данных. Если Вы не разблокировали учетные записи пользователей во время создания базы, можно разблокировать это сделать, выбирая пользователя на странице Users, указав Unlock User в списке Actions и кликнув Go. Это не изменяет пароль. Если пароль истек, когда Вы разблокировали пользователя, пароль так останется с истекшим сроком, пока Вы не отредактируете пользователя и не измените пароль.

Чтобы разблокировать пользователя и сбросить пароль, выполните следующие шаги на странице Edit Users :

Введите новый пароль в полях Enter Password и Confirm Password.

Установите флажок Unlocked.

Щелкните Apply, чтобы сбросить пароль и разблокировать учетную запись пользователя.

Привилегии

Есть два типа пользовательских привилегий:

Системные: Позволяют пользоватям выполнять определенные действия в базе данных

Объектные: Позволяют пользователям получать доступ и управлять конкретным объектом

Привилегия является правом выполнить определенный тип SQL-оператора или получить доступ к объекту другого пользователя. База данных Oracle позволяет Вам управлять тем, что пользователи могут и не могут сделать в базе данных.

Привилегии делятся на две категории:

Системные привилегии: Каждая системная привилегия позволяет пользователю выполнять определенную операцию в базе данных или класс операций базы данных. Например, привилегия создания табличного пространства является системной привилегией. Системные привилегии может предоставить администратор или кто-то, кому дали явное разрешение администрировать привилегию. Есть более 170 различных системных привилегий. Ряд системных привилегий содержат предложение ANY.

Объектные привилегии: Объектные привилегии позволяют пользователю выполнять определенное действие с конкретным объектом, таким как таблица, представление, последовательность, процедура, функция или пакет. Без определенного разрешения пользователи могут получить доступ только к своим собственным объектам. Объектные привилегии может предоставить владелец объекта, администратор или кто-либо, кому явно было дано разрешение предоставлять привилегии для объекта.

Создание пользователя мы с вами освоили. Давайте рассмотрим как уже созданного пользователя можно видоизменять. Допустим, вы хотите поменять ему пароль. Например, при создании БД пользователи SYS и SYSTEM получают пароли по умолчанию, которые просто необходимо заменить сразу же после создания БД. Иначе любой злоумышленник знакомый с БД Oracle может нанести вам большой ущерб. Для того, чтобы изменить пароль необходимо использовать команду ALTER - это так же довольно обширная команда и рассматривать все, что она может мы пока не будем. Сразу стоит отметить, что Oracle не допускает пароли типа 123456 или 543kolobok. Например, попробуйте следующее:

То есть пароли в Oracle должны начинаться с буквы, а не с цифры! Но в середине или в конце цифры применять можно! Я к стати до сих пор не могу понять, почему они так сделали? Хотя оставим это на усмотрение Oracle Inc. :) Давайте изменим пароль для схемы DUMMY с DUMB на PIONER4:

Вот теперь все верно! Пароль нашего пользователя изменен и мы можем в этом убедиться:

Есть контакт! Таким же образом я рекомендую изменить пароли по умолчанию у схем SYS и SYSTEM. А, пока вернем коннект пользователю SYSTEM:

С помощью команды ALTER - можно так же менять квоты пользователя в табличных пространствах. Например, урезать DUMMY за плохое поведение квоту на табличном пространстве USERS до 50 Мб:

Теперь DUMMY не выйдет за пределы 50 Мб. Чего ему вполне достаточно для нашего примера. Рассмотрим следующее понятие применимое к схеме БД, а именно профиль (Profile). С помощью профилей можно ограничить количество ресурсов системы и БД доступных для пользователя, а так же управлять ограничениями налагаемыми паролями. Если пользователю не назначен профиль по умолчанию, то будет использовать профиль DEFAULT (почти каламбур!).

Давайте создадим свой профиль и назначим его нашему пользователю:

Созданный нами профиль ограничивает срок действия пароля до 180 дней. Давайте, определим этот профиль для пользователя DUMMY:

Теперь срок действия пароля PIONER4 в схеме DUMMY будет всего 180 дней. А, после этого БД не будет принимать регистрации с данным паролем. При создании профилей используется ряд ограничивающих ресурсов. Чуть позже мы их опишем. Допустим, если у вас есть необходимость заблокировать определенного пользователя системы, это возможно сделать, применив все тот же ALTER USER:

Получим заблокированного пользователя:

И соответственно разблокировать пользователя:

Получим заблокированного пользователя:

Давайте рассмотрим так же такое понятие неразрывно связанное с пользователями БД, как роль (role). По своей сути роль это некая группа, в которой объединяются несколько привилегий. При использовании ролей можно изменять уровни привилегий для нескольких пользователей одновременно, что упрощает процесс администрирования в БД имеющей несколько сот пользователей. Для примера создадим роль DMROLE:

Пока это "пустая" роль. Теперь назначаем ей ряд привилегий с помощью оператора GRANT, например ALTER SESSION:

А вот теперь отпишем эту роль для нашего пользователя DUMMY конечно же с помощью оператора GRANT:

Вот теперь схема DUMMY может использовать привилегию ALTER SESSION. И конечно же, самое главное - "Удаление пользователя"! Удалить пользователя и все объекты его схемы достаточно просто:

Ключевое слово CASCADE означает удалить все связанное со схемой (пользователем). Что то, как то грустно все у нас кончается. :) Таким образом, теперь для вас я думаю, стала яснее картина создания схемы (пользователя) и работа с ней. Стоит отметить к слову, что назначение ролей пользователю БД не всегда оправдано, но как я уже сказал значительно облегчает администрирование. Думаю, вы уже заметили, что мы с вами работаем пока только через SQL*Plus. Есть и более продвинутые инструменты для администрирования БД Oracle, такое мощное средство как, например Enterprise Manager. Но это тема для отдельного рассказа. Да и пока его использование нам не столь необходимо. А вот вам задание создайте собственного пользователя и несколько объектов в нем и расскажите мне, что у вас получилось! Дерзайте! :)

В посте http :// itech - notes . blogspot . com / 2013 / 07 / select - for - update . html был рассказ о работе с конструкцией select for update в oracle . И был там такой текст: "если . обнаруживается, что на какой-то строке уже имеется лок от другой сессии, то текущая сессия будет ожидать - бесконечно! - пока лок не будет снят, и только после этого продолжит выполнение".

Интересный вопрос - собственно, а как и когда снимается лок (т. е. блокировка)?

1)Лок освобождается, только когда завершается транзакция.

2)Транзакция завершается, когда выполняются явные фиксация ( commit ) или откат ( rollback ) изменений, а также когда завершается открытая сессия (что по факту означает неявный откат).

Прим. 1: здесь предполагается, что сам код написан безопасно, что после наложения блокировки следует блок finally для снятия лока. Вопрос в том, что случится при непредвиденной ситуации, когда безопасный код просто не будет иметь возможности выполниться и "подчистить" за собой.

Ок, проверка. На одном компе запущено 2 приложения, первое лочит строки таблицы, второе "повисает" в ожидании возможности залочить. При остановке первого приложения (например, кнопка stop в ide , когда прикладной код по корректному закрытию транзакции не выполняется) второе приложение сразу подхватывает.

Аналогичный результат при тесте с двух разных компьютеров, когда одно приложение специально "прибивается" - при этом сразу распознаётся закрытие приложения и закрывается сессия.

При "жёстком" отключении сетевого шнура - беда. Блокировка остаётся. Висит долго. У меня не хватило терпения ждать вечность, но времени прошло немало. И никаких поводов разлочиться самостоятельно нет. Аналогично при переводе сетевого соединения в статус disabled в окне " network connections " win os .

Итак, получается, что сделать явный коммит или откат не можем, т. к. соединение благополучно потеряно. Что насчёт сессии - похоже, она остаётся? Для определения сессии, которая наложила лок, можно сделать такое:

TCMCP NCS_DATA TABLE 5223 63810 INACTIVE username hostname

Или что-нибудь в этом же духе. Смысл - проверить существование лока и его уровень, а также найти сессию и пользователя. To see who is locking the table . then you can find out what and why they are doing . before you kill them :)

К сожалению, провести более глубокий анализ пока не получается. Надеюсь, удастся найти время немного позже и поэкспериментировать с параметрами. Ну, а пока следует ещё раз напомнить и запомнить, что работая с блокировками, всегда есть риск наступить на здоровенные грабли повисшим на бесконечно долгое время локом.

Прим. 3. Какие ещё могут быть действия? Если используется сервер приложений ( jboss , websphere , weblogic , glassfish ), то они позволяют задать таймаут для открытой транзакции, по истечении которого сам AS выполнит откат.

Читайте также: