Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-17337
Evgeny
2003-02-15 09:25
2003.03.06
Indy Clients адрес сайта


1-17119
Meson
2003-02-22 12:47
2003.03.06
Frame


14-17296
Дмитрий К.К.
2003-02-20 07:59
2003.03.06
79 гринов


1-17166
iusup
2003-02-23 22:17
2003.03.06
Как сохранить изменения в проге...?


14-17369
neural_scream
2003-02-18 15:33
2003.03.06
ПРОЗРАЧНЫЙ РИЧЕДИТ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский