Perl для системного администрирования

Учетные записи баз данных



Учетные записи баз данных

Как упоминалось раньше, администраторы баз данных вынуждены иметь дело с рядом тех же вопросов, с которыми борются системные администраторы, в частности, с поддержкой регистрационных имен и учетных записей. Например, днем на работе мы ведем занятия по программированию баз данных. Каждый студент, посещающий эти занятия, получает регистрационное имя на сервере 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":

Существует много функций, связанных с учетными записями, которые можно добавить в эту программу. Вот лишь некоторые идеи:

Проверка паролей

Утилита соединяется с сервером и получает список баз данных и учетных записей; затем пытается установить связь, применяя ненадежные пароли (регистрационные имена, пустые пароли, пароли по умолчанию).

Карта пользователей

Создаем список регистрационных имен и баз данных, доступных пользователям с этими регистрационными именами.

Управление паролями

Система ограничения срока действия паролей.



Содержание раздела