Форум: "Базы";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
ВнизПрограммное добавление логина и пользователя в базу данных Найти похожие ветки
← →
AndrewK (2003-02-14 19:28) [0]Доброго времени суток.
Подскажите, пожалуйста, как можно решить следующую задачку.
Есть программа, которая работает с базой данных MS SQL Server 7.0
Она поддерживает работу нескольких групп пользователей:
Администратор, который может добавлять пользователей,
Координатора, который располагает рассширенными правами на работу в программе,
Оператора, который осуществляет только ввод текущей информации.
Как сделать так, чтобы администратор мог добавлять логин и
пользователя в базу данных. Проблема в еще в том, что логин может добавить только SecurityAdmin.
Вопрос, как корректно отследить наличие у пользователя этих прав? Если они у него есть, то как корректно добавить или удалить пользователя и логин (чтобы это не повлияло на другие базы данных, расположенных на этом же сервере)? И, позвольте еще один вопрос в догонку предыдущим, как перехватить сообщения базы данных, например "Login incorrect" и заменить его своим сообщением, например "Извините, такого логина нет.".
Заранее спасибо.
← →
asmith (2003-02-14 21:47) [1]Создаем в базе роли:
sp_addrole "Operator" -- для оператора
sp_addrole "Administrator" -- для админа
EXEC sp_addrolemember "db_securityadmin", "Administrator"
EXEC sp_addrolemember "db_accessadmin", "Administrator"
Юзеров вводим примерно такой процедурой:
CREATE PROCEDURE [dbo].[sp_NewUser]
@loginname varchar(30),
@password varchar(128),
@admin bit = 0
-- другие параметры
AS
declare @msg varchar(255), @dbname varchar(30)
set @dbname = db_name()
if exists (select * from master.dbo.syslogins where loginname = @loginname and isntname = 0)
begin
EXEC master..xp_sprintf @msg OUTPUT, "Cannot add new login and user account. Login "%s" already exists on SQL Server", @loginname
RAISERROR (@msg, 16, 1)
RETURN
end
if suser_sid(@loginname) is NULL and CHARINDEX("\", @loginname) = 0 -- быстрый некрасивый способ ловли доменных юзеров
EXEC sp_addlogin @loginname, @password, @dbname
else
EXEC sp_grantlogin @loginname
EXEC sp_grantdbaccess @loginname
if @admin = 1
begin
EXEC sp_addrolemember "Administrator", @loginname
EXEC sp_addsrvrolemember @loginname, "securityadmin"
end
else
EXEC sp_addrolemember "Operator", @loginname
-- делаем еще что-нибудь, например, лобавляем запись в собственную таблицу юзеров для нестандартных настроек
GO
Что касается перехвата сообщений о неправильновильном соединении с сервером, то это существенно зависит от клиентского ПО доступа к данным (BDE, ADO etc)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c