Главная страница
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.025 c
1-17026
Ravshan
2003-02-25 10:03
2003.03.06
как можно заставить combobox реагировать на OnMouseDown и т.д.


1-17082
IVANOV
2003-02-22 08:16
2003.03.06
Использование курсоров *.cur


3-16975
V_Pavel
2003-02-14 06:30
2003.03.06
MSSQL + Delphi


7-17404
Groove_
2003-01-07 00:42
2003.03.06
Mouse.visible:=false;


3-16890
ol
2003-02-14 13:21
2003.03.06
изменение ключевых полей в мастер-детейл????