SYBASE8 (988810), страница 4
Текст из файла (страница 4)
Пример:
sp_addlogin APB, lum74wgi, MPEI_teach
При запуске процедуры sp_addlogin SQL-сервер добавляет одну запись в таблицу master.dbo.syslogins, назначает уникальное на сервере имя пользователя (это имя заносится в поле suid), а также заносит другую информацию. Когда пользователь входит в систему, SQL-сервер сравнивает его имя и пароль с информацией в таблице syslogins. Поле пароль зашифровывается по специальному алгоритму и не может быть прочитан человеком. Значение поля suid в первой записи таблицы syslogin всегда является именем системного администратора, инсталлирующего SQL-сервер.
Создание групп
Группы обеспечивают удобный способ предоставления и отмены полномочий для более чем одного пользователя в одном предложении. Имя группы - это имя целой группы пользователей SQL-сервера. Использование групп необходимо там, где число пользователей SQL-сервера очень велико.
Группы пользователей создаются либо системным администратором, либо владельцем БД до того, как эта группа станет пользователем БД, с помощью процедуры sp_addgroup:
sp_addgroup <имя группы>
Например: sp_addgroup seneng
Системный администратор может переназначить пользователей в другие группы с помощью процедуры sp_changegroup.
При выполнении процедуры sp_ addgroup в таблицу sysusers добавляется одна запись, т.е. группа - это один пользователь, указывается в sysusers.
Добавление пользователей БД
Осуществляется с помощью процедуры sp_adduser:
sp_adduser <входное имя> [,<имя в БД>[,<имя группы>]]
<имя в БД> - это имя пользователя, отличное от <входного имени>, но известное БД; это необязательный параметр.
<имя группы> - имя существующей в БД группы; это необязательный параметр; если он не указывается, то это означает, что пользователь является членом группы по умолчанию "public".
Например: Предоставить право пользователю maryh, члену группы eng, работать с БД pubs2:
sp_adduser maryh, mary, eng
Системная процедура sp_adduser добавляет одну запись в системную таблицу sysusers пользовательской БД. Пользователь, имеющий соответствующую запись о себе в таблице sysusers:
1) может использовать команду use в БД, т.е. имеет доступ к БД;
2) будет использовать эту БД по умолчанию, если имя этой БД было указано как параметр в процедуре sp_addlogin или
3) можно использовать процедуру sp_modifylogin для того, чтобы назначить БД по умолчанию.
С помощью процедуры sp_adduser можно добавить пользователя типа "гость":
sp_adduser guest
При первом добавлении пользователя типа "гость", "гость" обладает всеми привилегиями в БД типа "public". Кроме этого, владелец БД и владельцы объектов БД могут изменить эти привилегии, используя команды grant и revoke.
К вашему серверу могут обращаться также удаленные пользователи, т.е. работающие на других серверах. Они имеют возможность запускать хранимые процедуры вашего сервера. Кроме этого, системный администратор может организовать пользователям своего сервера возможность использовать хранимые процедуры с других удаленных серверов.
Уничтожение входных имен, пользователей, групп
Системный администратор или владелец БД может использовать следующие процедуры:
1) sp_droplogin <входное имя> (только системный администратор)
2) sp_dropuser <имя в БД>
3) sp_dropgroup <имя группы>
Блокировка входных имен
Вместо уничтожения входных имен можно их заблокировать, а затем разблокировать с помощью процедуры sp_locklogin:
sp_locklogin [<входное имя>, "{lock | unlock}"]
Использование sp_locklogin без параметров показывает список всех заблокированных входных имен.
Изменение пользовательской информации
Для изменений паролей пользователей, групп, БД по умолчанию, языков по умолчанию, полных имен пользователей системный администратор, владелец БД или пользователь может использовать системные процедуры
sp_password, sp_changegroup, sp_modifylogin.
Изменение паролей
Управляющий системной защитой может установить время действия паролей пользователей, через которое необходимо обновлять эти пароли. Но даже если не использовать это время действия паролей, то очень важно в целях защиты БД время от времени пользователям менять свои пароли.
В таблице syslogin в колонке pwdate указывается дата последнего изменения пароля. Пользователь с помощью системной процедуры sp_password может в любое время сменить свой пароль, а управляющий системной защитой с помощью этой процедуры может сменить любой пользовательский пароль:
sp_password <старый пароль>, <новый пароль>[,<входное имя>]
<старый пароль> - для пользователя это старый, его ныне действующий пароль, а для управляющего системной защитой - это пароль управляющего системной защитой.
<новый пароль> - это новый пароль для пользователя, который вводит команду sp_password, либо новый пароль для пользователя с именем <входное имя>.
Параметр <входное имя> указывается только управляющим системной защитой.
Примеры:
1) пользователь изменяет пароль "3blindmice" на "2mediumhot":
sp_password "3blindmice", "2mediumhot"
2) управляющий системной защитой изменяет пароль пользователю victoria с "2tomato" на "sesame1":
sp_password "2tomato", "sesame1", victoria
Изменение умолчаний для пользователя
Системный администратор может изменить название БД по умолчанию, язык пользователя по умолчанию и полное имя в любое время с помощью процедуры sp_modifylogin:
sp_modifylogin <входное имя>, <опция>, <значение>
<опция> - это опция, которая изменяется; она принимает следующие значения:
defdb - БД, к которой присоединяется пользователь при указании <входного имени>;
deflanguage - язык пользователя по умолчанию, указанный в таблице master..syslanguages;
fullname - полное имя пользователя.
<значение> - новое значение для указанной опции.
Однако, процедура modifylogin не дает автоматического доступа к новой БД. Владельцу БД необходимо выполнить процедуру sp_adduser или sp_addalias.
Примеры:
1) изменения БД по умолчанию для пользователя anna:
sp_modifylogin anna, defdb, pubs2
новое имя БД - pubs2;
2) изменение языка по умолчанию пользователя claire на французский:
sp_modifylogin claire, deflanguage, french
3) изменение полного имени для пользователя clemens на samuel clemens:
sp_modifylogin clemens, fullname, "Samuel Clemens"
Изменение группы для пользователя
Каждый пользователь может быть членом только одной группы, исключая группу "public" (так как все пользователи являются членами группы "public"). До того как выполняется изменение группы, необходимо:
1) группа должна существовать (т.е. должна быть создана с помощью процедуры sp_addgroup);
2) пользователь должен иметь доступ к текущей БД (должен быть в таблице sysusers).
Изменение группы выполняется с помощью процедуры sp_changegroup:
sp_changegroup <имя группы>, <имя в БД>
Например:
1) перевести пользователя jim из текущей группы в группу manage:
sp_changegroup manage, jim
2) удалить пользователя jim из текущей группы, не переводя в другую группу:
sp_changegroup "public", jim
При переводе пользователя из одной группы в другую он теряет все полномочия, которые он имел в первой группе, и приобретает все полномочия, назначенные в новой группе.
Использование псевдонимов в БД
Механизм использования псевдонимов позволяет обращаться к двум и более пользователям как к одному пользователю БД. Например: очень часто несколько человек являются владельцами БД. Для назначения и уничтожения псевдонимов используются процедуры sp_addalias и sp_dropalias.
Создание псевдонима:
sp_addalias <входное имя>,<имя в БД>
<входное имя> - имя пользователя, который хочет иметь альтернативное имя в текущей БД
<имя в БД> - это имя должно быть и в таблице master..syslogin и в таблице sysusers.
При выполнении процедуры sp_addalias добавляется одна запись в таблицу sysalternates, т.е. устанавливается соответствие между <входным именем> и <именем в БД>.
Например: Mary является создателем-владельцем БД; она разрешает стать владельцами БД jane и sarah:
sp_addalias jane, dbo
sp_addalias sarah, dbo
Уничтожение псевдонима
По команде sp_dropalias <входное имя> удаляется соответствующая запись в таблице sysalternates, т.е. разрывается соответствие между именами.
Получение информации о пользователях
1) процедура sp_who выдает информацию о текущих пользователях SQL-сервера и текущих процессах;
2) процедура sp_displaylogin выдает информацию о входных именах;
3) процедура sp_helpuser выдает информацию о пользователях и псевдонимах в БД;
4) процедура sp_helpgroup выдает информацию о группах в БД.
Контроль целостности данных
Система контроля целостности БД (DBCC) - это набор команд-утилит для проверки логической и физической целостности БД. Команды DBCC используются:
1) как часть регулярного обслуживания БД системным администратором (для обнаружения и исправления ошибок);
2) для определения экстента возможного сбоя после обнаружения системной ошибки;
3) до выполнения дампирования БД;
4) если вы подозреваете, что БД вышла из строя.
Две основные функции DBCC:
1) контроль распределенных структур (команды checkalloc, tablealloc и indexalloc);
2) контроль связывания страниц и указателей данных и на уровне страниц и на уровне записей (checktable и checkdb).
Полномочия на выполнение команд DBCC имеют СА и ВБД. Кроме этого, полномочия на выполнение команд dbcc checktable, dbcc reindex и dbcc fix_text имеет владелец таблицы. Эти полномочия никому не передаются.
Концепции распределения страниц и объектов
По команде disk init новый диск памяти делится на выделенные единицы по 256 страниц (каждая страница - это 2 Кб). Когда требуется память под таблицу или индекс, SQL-сервер выделяет блок из 8 страниц, называемый экстентом. То есть выделенная единица памяти составляет 32 таких экстента. Для управления выделением памяти SQL-сервер использует экстенты:
1) при создании таблицы или индекса SQL-сервер выделяет экстент;
2) при добавлении записей в таблицу, SQL-сервер выделяет дополнительную страницу из экстента, если существующие для этой таблицы страницы заполнены до конца; а если заполнены все страницы экстента, тогда SQL-сервер выделяет дополнительный экстент;
3) при уничтожении таблицы или индекса SQL-сервер освобождает занятые экстенты;
4) при удалении записей из таблицы если полностью освобождается страница, SQL-сервер освобождает страницу, а при полном освобождении экстента SQL-сервер освобождает экстент.
Все это обеспечивает быстрый метод распределений памяти для БД.
Команды DBCC
1. dbcc checktable ({<имя таблицы> | <идентификатор таблицы>} [,skip_ncindex])
Эта команда проверит в таблице следующее:
-
правильность связи индекса и страниц данных;
-
правильность сортировки индексов;
-
согласованность всех указателей;
-
наличие информации в первой странице выделенной единицы памяти о распределении записей в каждой странице в этой единице памяти.
Опция skip_ncindex в этой команде отменяет контроль связи страниц, указателей и правильности сортировки в негрупповых индексах.
Пример: dbcc checktable (titles)
go
Если команда dbcc checktable обнаруживает неправильность в связи страниц, то выдается сообщение об ошибке.
Если обнаруживается ошибка в сортировке, то команда dbcc checktable может устранить эту ошибку.
Если есть записи, которые не учитываются в первой странице выделенной единицы памяти для таблицы, то команда dbcc checktable исправляет количество записей в этой странице.
2. dbcc checkdb [(<имя БД> [,skip_ncindex])]
Эта команда делает аналогичный контроль, как и по команде dbcc checktable, для каждой таблицы указанной БД. Если <имя БД> не указывается, то контроль осуществляется в активной БД.
3. dbcc checkcatalog [(<имя БД>)]
Эта команда проверяет целостность системных таблиц и связей между ними в указанной БД. Если <имя БД> не указывается, то контроль осуществляется в активной БД.
Например, эта команда проверяет следующее:
-
каждый тип в таблице syscolumns имеет запись в таблице systypes;
-
каждая таблица и представление в таблице sysobjects имеет один столбец в таблице syscolumns;
-
значение последней контрольной точки в таблице syslogs;
-
список сегментов, определенных для использования указанной БД.
Пример: