Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

Программное добавление логина и пользователя в базу данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
1-17081
Arhangel
2003-02-25 19:03
2003.03.06
filesetdate мудрит!


1-17104
Opera
2003-02-26 01:34
2003.03.06
Едиты и текст


7-17408
Коляныч
2003-01-07 09:44
2003.03.06
Принтер... последний вопрос ;)


4-17452
ers
2003-01-16 15:02
2003.03.06
Как узнать состояние CapsLock (On/Off) NumLock`om всё ясно...


3-16926
smus
2003-02-07 10:56
2003.03.06
Объём записей в базе ок. 10-15 тыс.