Учетные записи баз данных
Учетные записи баз данных
Как упоминалось раньше, администраторы баз данных вынуждены иметь дело с рядом тех же вопросов, с которыми борются системные администраторы, в частности, с поддержкой регистрационных имен и учетных записей. Например, днем на работе мы ведем занятия по программированию баз данных. Каждый студент, посещающий эти занятия, получает регистрационное имя на сервере Sybase и свою собственную (пусть и маленькую) базу данных, с которой он может работать. Вот упрощенная версия программы, которую мы используем для создания таких баз данных и регистрационных имен:
use OBI;
и ИСПОЛЬЗОВАНИЕ: syaccreate <username>
Sadmin = 'sa';
print "Введите пароль для Sadmin: ";
chomp($pw = <STDIN>);
$user=$ARGV[0];
# генерируем фиктивный пароль, основываясь на имени
# пользователя, записанном в обратном порядке, и дополняем его
дефисами, чтобы его длина составляла 6 символов
Sgenpass = reverse join(''. reverse split(//,$user)):
Sgenpass .= "-" x (6-length($genpass));
# вот перечень SQL-команд, которые используем
tt мы: 1) создаем базу данных на устройстве USER_DISK
с журналом регистрации в USER_LOG ft 2)
добавляем регистрационное имя для пользователя
на сервере, делая новую базу базой по умолчанию
# 3) переключаемся на вновь созданную базу данных
# 4) изменяем владельца базы данных на пользователя
(^commands = ("create database Suser on USER_DISK=5 log on USER_LOG=5", "
sp_addlogin $user,\"$genpass\",Suser". "use $user", "sp_changedbowner $user"):
Я соединяемся с сервером
$dbh = DB!->connect('dbi:Sybase:',Sadmin.$pw):
die "Невозможно соединиться: $DBI: errstr•n" unless (defined Sdbh):
$dbh->disconnect:
Поскольку эта задача заключается в выполнении ряда команд, которые не возвращают данных, можно записать их в компактном цикле, в котором вызывается повторно $dbh->ao(). Можно было бы использовать полностью идентичный сценарий для удаления этих учетных записей и баз данных, когда занятия завершатся:
use DBI;
# ИСПОЛЬЗОВАНИЕ: syacdelete <username>
$admin = 'sa':
print "Введите пароло для Sadmin: ":
chomp($pw = <STDIN>);
$user=$ARGV[0];
#
перечень SQL-команд, которые мы будем использовать;мы удаляем базу данных пользователя
и удаляем регистрационное имя с сервера
©commands = ("drop database $user", "sp_droplogin Suser");
# соединяемся с сервером
$dbh = OBI->connect('dbi:Sybase:',$admin,$pw);
die "Невозможно соединиться: $DBI::errstr\n" unless(defined $dbh);
# обходим в цикле массив команд, выполняя их последовательно for (©commands) {
$dbh->do($_) or die "Невозможно $_: " . $dbh->errstr . "\n": }
$dbh->disconnect or warn "Невозможно рассоединигься: " . $dbh->errstr . "\n":
Существует много функций, связанных с учетными записями, которые можно добавить в эту программу. Вот лишь некоторые идеи:
Проверка паролей
Утилита соединяется с сервером и получает список баз данных и учетных записей; затем пытается установить связь, применяя ненадежные пароли (регистрационные имена, пустые пароли, пароли по умолчанию).
Карта пользователей
Создаем список регистрационных имен и баз данных, доступных пользователям с этими регистрационными именами.
Управление паролями
Система ограничения срока действия паролей.