PDA

View Full Version : سوال: اتصال بانک اطلاعاتی به SQl Server با یک User مشخص



hadisalahi2
شنبه 23 آبان 1388, 11:56 صبح
با سلام خدمت دوستان.
من با استفاده از کد زیر یم بانک اطلاعاتی رو به SQl Server متصل میکنم .





ADOCommand1.CommandText :='EXEC sp_attach_db @dbname = N'+QuotedStr('BridgeDB')+','+
'@filename1 = N'+QuotedStr('F:\BridgeProject 2.0\DataBase\BridgeDB_Data.MDF')+','+
'@filename2 = N'+QuotedStr('F:\BridgeProject 2.0\DataBase\BridgeDB_Log.LDF');
ADOCommand1.Execute;


اما این دستور باعث اتصال بانک اطلاعاتی با کاربر SA میشه.
من میخوام با کاربری که خودم ایجاد کردم این بانک اطلاعاتی رو به SQl Server متصل یا اصطلاحا Attach کنم.
ممنون میشم دوستان در این مورد راهنمایی کنند.
یا حق:متفکر:

حسین شهریاری
شنبه 23 آبان 1388, 12:36 عصر
سلام

دوست عزیز این که با چه کاربری به پایگاه متصل میشید بستگی به طریقه و نحوه Connection String شما داره و دستور Attach نمیتونه تعیین کنه توسط چه کاربری این کار انجام بشه.

برای تغییر این وضعیت شما باید یک User تعریف کنید و کانکشن اصلی برنامه را با آن User تنظیم کنید
پس وقتی کانکشن شما از طریق آن User باشه عمل Attach شما هم تحت تاثیر همان انجام میشود.
مثلا این یه نوع کانکشنی هستش که من خودم توی برنامم ازش استفاده کردم.ومبتنی بر یک User است:
Provider=SQLOLEDB.1;Password=110;Persist Security Info=True;User ID=Hos;Initial Catalog=Sepehr

hadisalahi2
شنبه 23 آبان 1388, 15:48 عصر
سلام

دوست عزیز این که با چه کاربری به پایگاه متصل میشید بستگی به طریقه و نحوه Connection String شما داره و دستور Attach نمیتونه تعیین کنه توسط چه کاربری این کار انجام بشه.

برای تغییر این وضعیت شما باید یک User تعریف کنید و کانکشن اصلی برنامه را با آن User تنظیم کنید
پس وقتی کانکشن شما از طریق آن User باشه عمل Attach شما هم تحت تاثیر همان انجام میشود.
مثلا این یه نوع کانکشنی هستش که من خودم توی برنامم ازش استفاده کردم.ومبتنی بر یک User است:
Provider=SQLOLEDB.1;Password=110;Persist Security Info=True;User ID=Hos;Initial Catalog=Sepehr

با سلام وتشکر
دوست عزیز ، من خودم میدونم که باید User ایجاد کنم .
شما وقتی که این کد رو اجرا میکنید در حقیقت بانک اطلاعاتی رو به قسمت DataBase برنامه Sql Server متصل میکنید ، ولی هنگام Attach کاربر پیش فرض برای Owner بانک اطلاعاتی انتخاب میشه. در صورتی که من میخوام کاربری که ایجاد کردم به عنوان Owner بانک شناخته بشه.
حالا بعد با دستور Connction String عمل اتصال دلفی با SQl Server رو انجام می دهیم.
پس تا زمانی که بانک اطلاعاتی به SQl Server متصل نیست شما چطوری میخواهید با اون ارتباط برقرار کنید؟
ممنون میشم دوستان راهنمایی کنند.

hadisalahi2
یک شنبه 24 آبان 1388, 16:15 عصر
در پی پاسخ های بیشمار دوستان خودم دست به کار شدم و روش اون رو هم مینویسم تا اگه دوستان خواستند از اون استفاده کنند.
برای این که بتونیم یک بانک اطلاعاتی رو با یک کاربر خاص به SQl Server متصل کنیم میتونید از کد زیر استفاده کنید:

البته مراحلش رو قدم به قدم میگم:

1) اتصال بانک اطلاعاتی که روی هارد قرار دارد به SQL Server:




ADOCO.CommandText:='EXEC sp_attach_db @dbname = N'+QuotedStr('BridgeDB')+','+
'@filename1 = N'+QuotedStr(ExtractFilePath(Application.ExeName)+ 'DataBase\BridgeDB_Data.MDF')+','+
'@filename2 = N'+QuotedStr(ExtractFilePath(Application.ExeName)+ 'DataBase\BridgeDB_Log.LDF');
ADOCO.Execute;


2) ایجاد کاربر مورد نظر در SQl Serevr:




ADOCO.CommandText := 'Exec SP_AddLogin ' + QuotedStr('user name') +
',' + QuotedStr('Password') + ',' + QuotedStr('DataBase name') + ';';
ADOCO.Execute;

3) تغییر Owner یک بانک اطلاعاتی یا اصطلاحا همون کاربر بانک اطلاعاتی




ADOCO.CommandText:='use BridgeDB';
ADOCO.Execute;
ADOCO.CommandText:='EXEC sp_changedbowner '+QuotedStr('UserName');
ADOCO.Execute;

امیدوارم مورد قبول دوستان واقع بشه
یا حق