View Full Version : مجوز ايجاد كاربر توسط كاربري ديگر
hamidprogramer
دوشنبه 01 مهر 1387, 16:15 عصر
سلام
من توي بانكم يه رول دارم كه مي خوام كاربرهايي كه عضو اون هستن بتونن يه كاربر ديگه براي بانك و يه لوگين و همچنين افزودن كاربر به يك رول رو انجام بدن.
در مورد لاگين كه سرچ كردم توي تاپيك زير جوابم رو گرفتم و مشكلم حل شد ولي براي دستري هاي ديگر كه گفتم نمي دونم چيكار كنم.
دسترسي هايي كه من نياز دارم براي كاربر عضو يك رول:
1- ايجاد لوگين براي كاربر ديگر(حل شد)
2- ايجاد كاربر جديد در بانك
3- عضو كردن كاربر جديد در يك رول
http://barnamenevis.org/forum/showthread.php?t=87987
در ضمن براي اعطاي مجوز به لاگين در سطح سرور با چه دستوري مي تونم اين كار رو بكنم
بدون استفاده از MS
hamidprogramer
دوشنبه 01 مهر 1387, 18:25 عصر
با سلام
من فكر مي كنم با اين كدي كه نوشتم مشكلم حل ميشه :
use master
Create Login hamid
WITH PASSWORD = '133',
DEFAULT_DATABASE = MYDB;
Go
Grant Alter Any Login to hamid
Go
Use MYDB
Create User hamid For Login hamid
Go
Grant Alter Any User to hamid
Go
Grant Alter Any Role to hamid
Go
Exec Sp_AddRoleMember 'Manager' ,hamid
ولي نميدونم چرا پيغام خطا ميده:
Grantor does not have GRANT permission.
hamidprogramer
جمعه 05 مهر 1387, 22:30 عصر
سلام
فكر كنم سوالم خيلي سخت بوده؟
يكي به ما بگه چه جوري ميشه يك دسترسي رو به يك كاربر در سطح سرور داد مثل
Grant Alter Any Login to hamid
Hamid اسم يه كاربر در يك پايگاه داده غير سيستمي هستش.
اين دستور بالا رو از توي book Online در آوردم و لي Error ميده؟
راستي اين دستور رو با كاربر sa اجرا مي كنم. ولي نمي دونم چرا ميگه كسي كه ميخواد اين دسترسي رو بده خودش اين دسترسي رو نداره؟
لطفاً من رو راهنمايي كنين .
hamidprogramer
شنبه 06 مهر 1387, 21:24 عصر
سلام ؛
من پرميشن Alter Any Login رو با يوزر Sa به يه كاربر ديگه مي دم.بدون هيچ خطايي.
ولي وقتي با اون يوزر ديگر به بانك متصل مي شوم :
1- در قسمت پرميشن سرور اون كاربر دسترسي رو كه بهش اعطا شده نداره.
2- و نميتونه به كاربر ديگري پرميشن ذكر شده رو بده.
لطفاً من رو راهنمايي كنين.
AminSobati
شنبه 06 مهر 1387, 22:42 عصر
سلام دوست عزیزم،
کارهایی که در SQL Server انجام میدیم میشه به دو دسته تقسیم کرد: Server Level و Database Level. ساخت Login در حقیقت Server Level محسوب میشه لذا با سطوح دسترسی Loginها هم باید حل بشه (که ظاهرا حل کردین). اما برای اینکه یک کاربر در دیتابیس بتونه برای سایر Loginها یک Username در دیتابیس جاری درست کنه، باید عضو db_AccessAdmin باشه
hamidprogramer
شنبه 06 مهر 1387, 23:57 عصر
سلام؛
با تشكر فراوان از شما استاد گرامي
من با ايجاد يه تغيير كوچولو در دستور اعطاي مجوز Alter Any Login مشكلم حل شد.
قطعه كد زير براي افزودن يك كاربري كه خود بتواند كاربر ديگري در بانك ايجاد كند استفاده مي شود.
مراحل انجام كار:
1- ابتدا يك Login براي كاربر در سطح سرور ايجاد مي شود.
2- مجوز Alter Any Login به آن اعطا مي شود.
3- يك User در بانك مورد نظر ايجاد شده و با Login مرتبط مي شود.
4- مجوز Alter Any User به كاربر در سطح بانك اعطا مي شود.
5- مجوز Alter Any Role به كاربر در سطح بانك اعطا مي شود.
6- در آخر نيز كاربر عضور يك Role كه براي مديران تهيه شده مي شود.
Create Login @UserName
WITH PASSWORD =@Password,
DEFAULT_DATABASE = MYDB;
Go
Grant Alter Any Login to @UserName WITH GRANT OPTION
Go
Create User @UserName For Login @UserName
Go
Grant Alter Any User to @UserName WITH GRANT OPTION
Go
Grant Alter Any Role to @UserName WITH GRANT OPTION
Go
Exec Sp_AddRoleMember'Manager',@UserName
فقط مسئله اي كه هست من اين كد رو نمي تونم در قالب يك Sp بنوسيم فكر مي كنم كه دستور Create Login رو نمي شه درون يك Sp با پارامتر استفاده كرد. به اين صورت كه نام كاربر و رمز عبور به عنوان پارامتر ورودي باشه و طي مراحلي كه ذكر كرد كار به صورت يك روال انجام بشه .
ميخوام بدونم نظر من درسته يا اينكه ميشه دستور Create Login رو درون يك Sp گذاشت؟.
با تشكر فراوان.
AminSobati
یک شنبه 07 مهر 1387, 00:09 صبح
مطمئن نیستم پارامتری بشه. نهایتا میتونین از Dynamic TSQL استفاده کنین
hamidprogramer
یک شنبه 07 مهر 1387, 22:08 عصر
سلام:
من دستورات رو به اين صورت با استفاده از sp_executesql هم نوشتم منتهي باز هم خطاهاي فراواني ميگيره !
آيا منظور شما از Dynamic Sql روشي هست كه من اجرا كردم؟
Declare @ParamList nvarchar(200),@SQLCommand nvarchar(300)
Set @ParamList = N'@UserName nvarchar(50),@Password nvarchar(50)'
Set @SQLCommand =
N'Create Login @UserName
WITH PASSWORD =@Password,
DEFAULT_DATABASE = MYDB;
Go
Grant Alter Any Login to @UserName WITH GRANT OPTION
Go
Create User @UserName For Login @UserName
Go
Grant Alter Any User to @UserName WITH GRANT OPTION
Go
Grant Alter Any Role to @UserName WITH GRANT OPTION
Go
Exec Sp_AddRoleMember Manager ,@UserName'
Execute sp_executesql @SQLCommand,@ParamList,@UserName = 'HamidReza',@Password = '123'
AminSobati
یک شنبه 07 مهر 1387, 23:05 عصر
دوست عزیزم،
شما کاملا درست از این SP استفاده کردین ولی مشکل اینجاست که اساسا CREATE LOGIN پارامتر نمیپذیره. این شیوه برای Queryها استفاده میشه. شما چیز شبیه به این نیاز دارید:
Execute ('Create Login ' + @UserName ... )
hamidprogramer
دوشنبه 22 مهر 1387, 20:06 عصر
سلام
من با استفاده از راهنمایی شما استاد عزیز یه تریگر نوشتم که بعد از درج یک رکورد اطلاعاتی در جدول کاربران به طور خودکار در بانک لاگین و دسترسی های لازم به اون داده میشه. فقط مشکلی که هست من در آخرین مرحله این تریگر کاربر ایجاد شده رو عضو یک رول می کنم (توسط Sp_AddRoleMember) و (Sp_DropRoleMember)که با خطای زیر مبنی بر عدم امکان استفاده از این Sp در یک ترنزیشن مواجه می شوم.
The procedure 'sys.sp_addrolemember' cannot be executed within a transaction.
خواهش می کنم در صورت امکان من رو راهنمایی کنین با تشکر.
متن تریگر :
Alter TRIGGER Opr_AddUserIntoDatabase
ON Users AFTER INSERT
AS
BEGIN
DECLARE @UserName nvarchar(30),
@Password nvarchar(50),
@UserType bit
SELECT @UserName = UserName,
@Password = Password,
@UserType = UserType FROM INSERTED
Declare @Str1 nvarchar(100),
@Str2 nvarchar(100),
@Str3 nvarchar(100),
@Str4 nvarchar(100),
@Str5 nvarchar(100)
Set @Password = (Select QUOTENAME (@Password,''''))
/*--Set Text For Create Login And Grant Permission On Server----------------------*/
Set @Str1 = 'Use Master Create Login ' + @UserName +
' WITH PASSWORD = ' + @Password +
',DEFAULT_DATABASE = MYDB;'
Set @Str2 = 'Use Master Grant Alter Any Login To ' + @UserName +
' WITH GRANT OPTION'
/*--Set Text For Create User And Grant Permission On Database---------------------*/
Set @Str3 = 'Use MYDB Create User ' + @UserName + ' For Login ' + @UserName
Set @Str4 = 'Use MYDB Grant Alter Any User To ' + @UserName + ' WITH GRANT OPTION'
Set @Str5 = 'USe MYDB Grant Alter Any Role To ' + @UserName + ' WITH GRANT OPTION'
/*--Execution Texts---------------------------------------------------------------*/
IF Not EXISTS (SELECT * FROM sys.server_principals WHERE name = @UserName)
Begin
Execute(@Str1)
IF Not EXISTS (SELECT * FROM sys.database_principals WHERE name = @UserName)
Begin
Execute(@Str3)
/*--Adding User On Database Role-----------------------------------*/
IF @UserType = 1
Begin
Execute('Exec Sp_AddRoleMember Manager ,' + @UserName)
Execute(@Str2)/*--Set Permission For Alter Any Login*/
Execute(@Str4)/*--Set Permission For Alter Any User*/
Execute(@Str5)/*--Set Permission For Alter Any Role*/
End
IF @UserType = 0
Execute('Exec Sp_AddRoleMember Operator,' + @UserName)
End
End
END
GO
AminSobati
دوشنبه 22 مهر 1387, 23:19 عصر
دوست عزیزم فکر میکنم سرویس پک نداره SQL Server شما
hamidprogramer
چهارشنبه 24 مهر 1387, 21:38 عصر
آیا راهی غیر از استفاده از Sp_Addrolemember برای عضو کردن یک کاربر در یک نقش وجود داره ؟
راهی که بشه اونو در ترنزیشن بالا استفاده کرد.؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.