PDA

View Full Version : کاربر sa و dbo کیست



منصور بزرگمهر
جمعه 05 تیر 1388, 01:51 صبح
من میدانم برای ورود به SQL Server ما دو مود داریم: 1- مود یوزرهای ویندوز 2 - مود یوزرهای SQL Server

همچنین من می دانم دو سطح دسترسی داریم. لاگین کردن به خود SQL Server و استفاده از USER ها برای استفاده از پایگاه داده.
حال ما یکUSER با نام sa (مودSQL Server) در سطح اتصال به خود SQL Server را داریم، و یک USER با نام dbo در پایگاه اطلاعاتی. (من نمی دانم USER مورد dbo متعلق به مود SQL Server است یا مود ویندوز)
حال این USER ها چه کسانی هستند، در مورد هر دو توضیح کامل دهید، تا در ادامه بحث من سئوالات مربوط به این مبحث را ادامه دهم.

متشکرم

alirezavafi
شنبه 06 تیر 1388, 00:33 صبح
sa یعنی system administrator که بصورت پیش فرض غیرفعاله ، یعنی اکانت ویندوز شما اگه جزو ادمین ها باشه هم همون دسترسی رو داره
ی وقتی شما به دیتابیس دسترسی کامل از هرجهت دارین در اصل با یوزر dbo به اون کانکت شدید یوزرها به لوگین ها وصل هستند (با توجه به سطح دسترسی)

منصور بزرگمهر
شنبه 06 تیر 1388, 18:11 عصر
sa را سر در می اورم، sa یوزری است که با مود SQL Server نقش Admin را اجرا می کند، ولی ابتدا یوزر BUILTIN\Administrators در سطح SQL Serve بجای ادمین ویندوز ما می نشیند، و چون SQL Server چون نام یوزر ادمین در هر کامپیوتری را نمی داند، این یوزر جانشین آن می شود(با برنامه پس زمینه این یوزر را پیدا می کند - لطفاً در این مورد توضیح دهید)

و اما dbo، این یوزر چیست؟ آیا مانند BUILTIN\Administrators این یوزر نیز نماینده ادمین می باشد، و حال نام dbo همان نقش پیدا کرده(در سطح پایگاه داده)، و چرا همان نام BUILTIN\Administrators را اینجا نگذاشته اند، و اصولاً چرا نام واقعی ادمین ها ویندوز را استفاده نمی کند. ولی شاید جواب سئوال را خودم تا حدودی بدانم، چرا که اگر ما بخواهیم برنامه نویسی کنیم، هر جای (هر کامپیوتری) ما نام یوزر ادمین را ندانسته، و این نمایندگان کار (یوزرها) انجام می دهند.
نکته دیگری که باز به ذهن من می رسد، و می خواهم جواب انرا بدانم این است، که اصولاً ما هر شی ای را که ایجاد می کنیم(نظیر فانکشن ها، جداول و ...) (و در محیط یوزر ادمین باشیم)، صاحب آنها همان dbo است، و اگر همان فانکشنها و یا جداول را در سایر یوزرها (مثل یوزر Hassan) فرا خوانی کنیم، ایا انها کار خواهد کرد یا خیر.
سئوال دیگری که همین جا دوباره به ذهنم رسید، و مربوط به موضع است، ما اگر چند یوزر در ویندوز تعریف کنیم، توسط Computer Managment و قسمت Local User and Group (یا یوزرهای که توسط دامین سرور ممکن است تعریف کنیم)، یوزر اولیه ما که هنگام نصب ویندوز معرفی کرده ایم، گویا کلاً ادمین مطلق است، ولی باقی یوزرها محدود شده، چرا که با این یوزرها حتی در درایو c نیز نمی توانیم چیزی بنویسم، (و فقط پوشه ...) چگونه این یوزرها را نیز ادمین کرده، (حتی با یک دستور نه مطابق مراحل بعد) چرا که ممکن است ما چندین ادمین بخواهیم، (یا سطوح مختلف اجرائی در ویندوز)، یک چیزهای پراکنده می دانم، مثلاً به Group Policy رفته و یک چیزهائی قبلاً ها دیده بودم، حال چگونه می توان این چیزها را تنظیم کرد.
متشکرم از پاسخ ها شما

alirezavafi
شنبه 06 تیر 1388, 23:32 عصر
admin ها زیر مجموعه گروه Administrators می باشند
در sql امنیت در دو سطح است یکی ورود به sql با یک لوگین که یه سری دسترسی داره و به یه user هایی وصل هست یکی در سطح دیتابیس که با یوزر ها دسترسی کنترل می شه . لوگین ها به یوزرهایی خاص وصلن
یوزر dbo سطح دسترسی برای دیتابیس رو داره و هر لوگینی که زیرمجموعه گروه ادمین ها باشه در لایه ورود به دیتابیس با یوزر dbo وصل میشه

esmit61
جمعه 20 آذر 1388, 18:00 عصر
من آخرش متوجه نشدم این dbo یک یوزره یا نه ؟ اگه یوزر نیست پس چرا current_user این رو(dbo) نشون میده. اگه هست پس چرا میگید نیست !!!!
ببینید مشکل من اینه که میخوام هر کس کاری انجام داد اسم یوزرش رو ذخیره کنم. ولی هروقت از current_user استفاده میکنم، dbo نشون میده:ناراحت:
پلیز هلپ می !

AminSobati
شنبه 21 آذر 1388, 10:08 صبح
سلام دوست عزیزم،
در SQL Server موضوع Login Name و User Name کاملا جدا از هم هستند. sa یا builtin\administrators رو بعنوان Login Name میشناسیم. یک Login Name باید برای ورود به هر دیتابیس، یک User Name در اون دیتابیس داشته باشه. از اونجایی که sa و builtin\administrators عضو sysadmin هستند، اجازه انجام هر عملی چه در سطح SQL Server و چه در سطح دیتابیس رو دارند. و اما dbo در دیتابیس قرار داره و User Name شناخته میشه. اگر کسی عضو sysadmin باشه (مثل sa) برای ورود به دیتابیس نیازی به داشتن User Name نیست و به مجرد اینکه وارد دیتابیس بشه، نام User Nameش همون dbo در نظر گرفته میشه. با توجه به اینکه عموما ما در حالت sysadmin با SQL Server کار میکنیم، هر وقت User Name رو چک میکنیم بهمون dbo برمیگردونه

esmit61
شنبه 21 آذر 1388, 13:25 عصر
ممنون از جوابتون
حالا لطف میکنید بگید من این مشکل رو باید چجوری حل کنم؟

ببینید مشکل من اینه که میخوام هر کس کاری انجام داد اسم یوزرش رو ذخیره کنم. ولی هروقت از current_user استفاده میکنم، dbo نشون میده

AminSobati
شنبه 21 آذر 1388, 14:25 عصر
میتونین برای هر کاربر، Login Name و User Name جدا بسازین

esmit61
شنبه 21 آذر 1388, 23:38 عصر
جناب ثباتی، ساختم ولی باز هم dbo نشون میده. عجب گیری داده به این dbo. شما خودتون از این روش استفاده کردید؟ جواب داد؟ میشه به منم بگید چیکار کنم؟
گفتم dbo رو حذف کنم، حذف هم نمیشه. اصلاً گزینه delete نداره
مجدداً پلیز هلپ می !

AminSobati
شنبه 21 آذر 1388, 23:47 عصر
لاگین از نوع Windows Authentication تعریف کردین یا SQL Authentication؟

esmit61
یک شنبه 22 آذر 1388, 10:03 صبح
از نوع SQL Authentication ديگه !

اگه ميشه لطف كنيد مراحل انجام كار رو بنويسيد. هر كاري ميكنم dbo مياد.

AminSobati
یک شنبه 22 آذر 1388, 15:02 عصر
وقتی یک لاگین ساختین، باید با همون کاربر به SQL Server لاگین کنین. اگر رول sysdmin نداده باشین، دیگه dbo رو بعنوان user name برنمیگردونه

tux-world
دوشنبه 21 دی 1388, 17:25 عصر
الان چیکار کنیم که همین یوزر sa فعال بشه و بتونیم باهاش کانکت بشیم به دیتابیس . من هر کاری می کنم با این یوزر و یوزرهایی که ساختم کانکت نمیشه و خطا میده که اسکیوال نیست و یا اینکه دسترسی ندارید

Hamid.Kad
دوشنبه 21 دی 1388, 23:01 عصر
باید روی instance (همون جایی که دیتابیسها رو توش می سازید) راست کلیک کنید. از قسمت Sercurity ، در بخش Server Authentication، گزینه Sql server and Windows Authentication رو انتخاب کنید و یک بار سرویس Sql Server رو restart کنید