PDA

View Full Version : چند سوال در مورد Userها(2)



پرواز
دوشنبه 14 آبان 1386, 02:43 صبح
با سلام.

سوالات من مربوط به بانکیه که تو SQL 2000 طراحی شده و بروی شبکه Local استفاده میشه (کلاینت سروری نیست). علاوه بر این Authentication من SQL Server and Windows هست. سوالاتمو تو سه تا تاپیک می پرسم که قوانین هم اجرا شده باشه (پس فکر نکنید تکراریه!)

سوال:

برای اینکه بخوام تو بانکم یه سری اعمال از کاربران ذخیره کنم (مثلا بگم فلان رکورد توسط کدوم کاربر ثبت شده) باید چیکار کنم؟ بدون داشتن یه جدول برای کاربران میشه؟ یعنی از همون Userهای بانک استفاده کنم. یا اینکه بهتره که خودم جدولشو بسازم و اطلاعاتشو ذخیره کنم؟

AminSobati
سه شنبه 15 آبان 1386, 20:43 عصر
در این سایت زیاد بحث شده، جستجو کنین

پرواز
سه شنبه 15 آبان 1386, 22:06 عصر
جستجو معمولاً جوابهای قابل قبولی نمیده. میشه بفرمایید از چه کلماتی برا جستجو استفاده کنم که یه جواب به دردبخور بگیرم؟

AminSobati
چهارشنبه 16 آبان 1386, 00:40 صبح
البته حق با شماست، گاهی خود جستجو معضله! اینها رو من پیدا کردم، امیدوارم کمک کنه:
http://barnamenevis.org/forum/showthread.php?t=50220
http://barnamenevis.org/forum/showthread.php?t=20618
http://barnamenevis.org/forum/showthread.php?t=76502

پرواز
چهارشنبه 16 آبان 1386, 02:32 صبح
ممنونم جناب ثباتی.
منظورم این نبود که شما تو زحمت بیفتید. فقط خواستم چندتا کلمه کلیدی بگید که خودم برم دنبالش.
به هر حال لطف کردید.

تاپیک های جالبی بود. ولی فکر کنم جواب کار من نبود. مشکل از من بود که سوالمو بد مطرح کردم.

دیتابیس Northwind رو در نظر بگیرید. اون یه جدول به اسم Employees داره که با جدول Orders ارتباط یک به چند داره و EmloyeeID رو در اون ذخیره می کنه. من می خوام بدونم میشه یکی از فیلد های جدول sysusers رو به جای EmloyeeID در دیتابیسم استفاده کنم؟
اصلا SQL این امکان رو به من میده؟
اگه بشه انجامش داد دیگه احتیاج به ساختن جدول Emloyees از بین میره و بانک سبکتر میشه.

AminSobati
چهارشنبه 16 آبان 1386, 12:01 عصر
در حقیقت فلسفه داشتن جدول Employees چیزی فراتر از ثبت رد پای کاربران هستش. مثلا شما قصد دارین نام کامل، آدرس، email و ... از هر کاربر رو داشته باشید. طبیعتا اینجا جدول sysusers کمکی به شما نمیکنه. من پیشنهادم اینه که جدول Employees رو بسازید، اما در یکی از فیلدهای اون هم نام Login کاربر که در SQL Server ایجاد کردین رو ذخیره کنید. حالا از EmployeeID برای ثبت عملیات کاربران استفاده کنید. حذف یک جدول، الزاما به سبک شدن دیتابیس کمکی نمیکنه. ممکنه دیتابیس شما فقط 5 جدول داشته باشه اما انواع پردازشها و Queryها در حدی باشه که یک دیتابیس با 50 جدول چنین چیزی نداشته باشه!

پرواز
چهارشنبه 16 آبان 1386, 20:24 عصر
ممنونم آقای ثباتی.

با توجه به این تاپیک و تاپیک مشابه (3) میشه این نتیجه رو گرفت که بیام یه جدول Employees بسازم. اجازه کار با این جدول رو تو یه پنل مدیریتی فقط به Admin بدم. یکی از فیلدهای جدول Emloyees همون لاگین کاربره.

برای ایجاد کاربران باید یه تصمیم اساسی بگیرم دیگه. اینکه گفته بودم می خوام با اضافه شدن یه رکورد به این جدول یه لاگین ساخته بشه منظورم اینه که مدیر وقتی که یه کارمند ثبت می کنه خودبه خود لاگین هم ساخته بشه. و اگه یه کارمند رو از جدول Employees حذف کرد لاگینش هم از بین بره.

برای این کار خواستم از تریگر استفاده کنم. مشکلی پیش میاره؟ یعنی بهتره که تریگر ننویسم؟

AminSobati
چهارشنبه 16 آبان 1386, 22:45 عصر
نه مشکلی که نداره

پرواز
دوشنبه 21 آبان 1386, 16:23 عصر
سلام آقای ثباتی

من یه تریگر نوشتم که بیاد بعد از INSERT در جدول Employees یه دونه لاگین بسازه.
متن تریگر اینه:


CREATE TRIGGER dbo.CrateLogin
ON dbo.tblEmployees AFTER INSERT
ASBEGIN
DECLARE @LoginName nvarchar(30),
@Password nvarchar(50)
SELECT @LoginName = LoginName,
@Password = Password FROM INSERTED
execsp_addlogin @loginame = @LoginName,
@passwd = @Password,
@defdb ='dsDB'
execsp_grantdbaccess @loginame = @LoginName,
@name_in_db = @LoginName
END
GO

ولی وقتی که تو جدول یه رکورد Insert میکنم این خطا رو میده:

AminSobati
دوشنبه 21 آبان 1386, 23:43 عصر
اگر در 2005 هستین، از CREATE LOGIN و CREATE USER استفاده کنین

پرواز
سه شنبه 22 آبان 1386, 00:28 صبح
از 2005 به 2000 کانکت شدم. برا اون چیکار کنم؟

AminSobati
سه شنبه 22 آبان 1386, 00:43 صبح
میتونین Transaction رو شبیه سازی کنین. یعنی عمل ساخت کاربر رو خارج از Trigger، فرضا در یک SP انجام بدین و اگر سایر کارها به مشکل خورد، اون کاربر رو حذف کنین (نوعی Rollback دستی!). یعنی Admin با فراخوانی اون SP کار اضافه کردن User رو انجام بده

پرواز
سه شنبه 22 آبان 1386, 00:48 صبح
با sp هم انجامش دادم آقای ثباتی. ولی جواب نداد.

یعنی از تریگر ارجاع دادم به sp. منظورتون همینه دیگه؟

AminSobati
سه شنبه 22 آبان 1386, 00:53 صبح
نه عزیزم، Trigger همیشه داخل Transaction قرار داره. پس وقتی از Trigger یک SP فراخوانی بشه، SP هم تحت همون Transaction هستش

پرواز
سه شنبه 22 آبان 1386, 00:55 صبح
پس راه حل شما رو من متوجه نشدم. اگه میشه بیشتر توضیح بدید.

ممنونم.

پرواز
سه شنبه 22 آبان 1386, 01:03 صبح
آهان متوجه شدم. یعنی بیام همزمان با Insert از همون برنامه کاربردی که نوشتم یه sp برا ساختن لاگین اجرا کنم. درسته؟

AminSobati
سه شنبه 22 آبان 1386, 01:04 صبح
بله همینطوره!