По умолчанию, если администратор не предпринимал специальных действий, базу данных может создать любой пользователь операционной системы. Этот пользователь становится владельцем этой базы (то есть получает в ней права администратора - DBA privilege) и может делать с ней все, что угодно. В примерах предполагается, что все действия выполняются от имени обычного пользователя операционной системы с именем dbuser, не имеющего в СУБД никаких особых прав.
Перед созданием базы убедитесь в том, что переменные окружения INFORMIXDIR и INFORMIXSERVER установлены правильно - то есть в том, что вы будете работать с нужным вам экземпляром СУБД.
Если создаете локализованную базу данных - с поддержкой данных на национальном языке - проверьте значения переменных окружения DB_LOCALE и CLIENT_LOCALE и установите их так, как вам нужно. Подробности о локализации см. на странице Informix GLS. Имейте в виду, что утилита dbaccess, с помощью которой вы выполняете запрос, является клиентом СУБД, а не ее частью, и на нее влияет значение переменной CLIENT_LOCALE, а не DB_LOCALE.
Создание новой базы выполняется с помощью запроса CREATE DATABASE, например:
CREATE DATABASE newbase
Это самая простая форма запроса. Вы указываете только имя новой базы данных и ничего более. Такой запрос создаст базу
Более полный вариант:
CREATE DATABASE newbase IN sp1 WITH LOG
Дополнительные параметры означают:
Выполнить запрос можно с помощью утилиты dbaccess:
~dbuser > echo CREATE DATABASE newbase IN sp1 WITH LOG | dbaccess sysmaster ~dbuser >
С этого момента к базе данных можно подключаться и работать с хранящимися в ней данными.
Создатель базы (в данном случае пользователь dbuser) имеет во вновь созданной базе права администратора - то есть полные права. Такие же права, независимо от желания создателя, имеет пользователь informix. Ни один другой пользователь пока что не имеет возможности даже подключиться к новой базе.
Вообще в Informix существует три уровня привилегий доступа к отдельной базе:
Администратор базы данных (обладающий привилегией DBA) может распределять права доступа к этой базе с помощью запросов GRANT и REVOKE.
~dbuser 1> echo GRANT CONNECT TO user1 | dbaccess newbase ~dbuser 2> echo GRANT RESOURCE TO user2 | dbaccess newbase ~dbuser 3> echo GRANT DBA TO user3 | dbaccess newbase ~dbuser 4>
В результате этих манипуляций пользователь user1 получит возможность подключиться к базе newbase. Пользователь user2 получит все права, которыми обладает user1, и, кроме того, ему будет разрешено создавать в базе свои собственные объекты. Пользователь user3 получит те же права, что и создатель базы.
Если пользователь user3 не оправдал доверия, можно лишить его привилегий администратора и оставить только право распоряжаться только его собственными объектами:
~dbuser 501> echo REVOKE DBA FROM user3 | dbaccess newbase ~dbuser 502> echo GRANT RESOURCE TO user3 | dbaccess newbase ~dbuser 503>
В Informix (как и в других СУБД) имеется еще один псевдопользователь с именем public. Назначение каких-либо прав этому пользователю означает предоставление соответствующих привилегий кому угодно. Разумеется, пользователь при подключении к базе должен каким-то образом авторизоваться, то есть учетная запись операционной системы все равно должна присутствовать.
~dbuser 11> echo GRANT CONNECT TO public | dbaccess newbase ~dbuser 12>
После этого к базе сможет подключиться кто угодно.
Опция способа поддержки транзакций в новой базе данных может быть указана как:
В приведенном списке под объектами базы данных понимаются таблицы, представления, типы данных, хранимые процедуры, триггеры.
Характеристика | БД Informix | БД ANSI |
---|---|---|
Неявные транзакции | Любой запрос вне транзакции интерпретируется как неявная транзакция. Исполнение такого запроса подтверждается автоматически, если не обнаружено ошибок. Явный COMMIT не требуется. | Любой запрос вне транзакции интерпретируется как начало неявной транзакции. Исполнение запроса или группы запросов должно завершаться явной операцией COMMIT WORK (или ROLLBACK WORK, если результат нас не устроил) |
Журнал транзакций | Возможен выбор между отсутствием поддержки транзакций, буферизованным и небуферизованным журналированием | Небуферизованный журнал |
Принадлежность объектов к схемам | По существу не имеет большого значения. Нельзя создать два объекта одного и того же типа с одинаковыми именами, но принадлежащие разным пользователям (разным схемам). Указание имени схемы не обязательно. | Разрешено создавать несколько объектов одного и того же типа с одинаковыми именами, при условии, что они принадлежат разным пользователям (разным схемам). Имя схемы считается частью сигнатуры объекта. Если имя схемы не указано, считается, что пользователь работает с собственным объектом. При обращении к чужому объекту указание схемы обязательно. |
Уровень изоляции по умолчанию | COMMITTED READ | REPEATABLE READ |
Права доступа для новых объектов по умолчанию | Каждому вновь созданному объекту автоматически назначаются права доступа public. Это поведение можно отменить на уровне сессии, установив для этой сессии параметр NODEFDAC=yes | Не назначаются. Все права доступа к объекту должны быть назначены явно. |
Длинные символьные строки | Попытка вставки в таблицу символьной строки, длина которой превышает длину поля, завершится без ошибки, при этом значение будет автоматически обрезано | Попытка вставки в таблицу символьной строки, длина которой превышает длину поля, завершится с ошибкой |
Как видно, "родные" базы данных Informix налагают на пользователя значительно меньше ограничений.