# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  مشکل احراز هویت در هنگام اتصال به SQL Server

## Mbr

با سلام به دوستان عزیز
یک سوال داشتم و آن اینست که من از کامپوننت SDAC برای متصل شدن به SQL Server استفاده کرده ام ولی زمانی که می خواهم با استفاده از این کامپوننت به SQL Server همراه با username و password یک پیغام داده می شود و اتصال برقرار نمی شود در حالی که به راحتی با این username  و password در خود محیط sql می توانم کار کنم . اگر می شود کمکم کنید . پیغام اینست که : 
login failed for user 'saeed. reason &#58; not associated with a trusted sql server connection.

----------


## A.VAHID

سلام
من با برنامه SDAC کار نکردم ولی یک بار نام کاربر و یک بار نام دیتابیس در SQL  را همراه فاصله و نقطه گذاشتم در اتصال به دیتابیس مشکل داشت شاید مال شما هم همین باشد
ع.و

----------


## مهدی کرامتی

در SQL Server رویه احراز هویت (Authentication) را بر روی Windows + SQL Server قرار دهید.

----------


## Mbr

با سلام 
من زمانی که در sdac در قسمت احراز هویت Authentication  را بر روی windows قرار می دهم بدون هیچ مشکلی به sql متصل می شوم ولی می خواهم با username و password اینکار انجام گیرد نه بوسیله log خود ویندوز و زمانی که در احراز هویت قسمت sql server را انتخاب می کنم و username و Password را می زنم با پیغام خطا بالا مواجهه می شوم . 
متشکرم اگر کمکم کنید .

----------


## مهدی کرامتی

تغییری که شما باید بدهید در تنظیمات SQL Server‌ است، نه SDAC.

مراحل زیر را طی کنید: 

1- در Enterprise Manager‌ روی نام سرورتان رایت کلیک کنید.

2- از منویی که ظاهر میشود گزینه Properties‌ را انتخاب کنید.

3- در صفحه SQL Server Properties صفحه Security را انتخاب کنید.

4- در بخش Authentication گزینه SQL Server and Windows را انتخاب کنید.

میتوانید مراحل را در تصاویر دنبال کنید.

----------


## nasr

ممنون از آقای کرامتی عزیز :flower:

----------


## hr110

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

برای اتصال به اسکیوال و از طریق ADO شما باید به سرور لاگین کرده باشید و در غیر اینصورت نمیتوان به بانک اطلاعاتی دسترسی داشت، لازمه اینکار نیز اینست که در هنگام استفاده از نرم افزار سمت client شما باید ابتدا با یکی از userهای سرور به سرور لاگین کرده (که میتوان اینکار کار را با تنظیمات به طور خودکار و هنگام ورود به ویندوز نیز انجام داده که مفصلاً جای بحث داره) و سپس نرم افزارتان را اجرا نمایید. این کار میتونه مشکل ساز باشه و اونهم اینکه یک کاربر برنامه نویسی میتونه با استفاده از این کاربر به بانک اطلاعاتی شما دسترسی پیدا کرده و خرابکاری کنه :( 
به نظر شما برای این مشکل چه باید کرد  :متفکر:  ؟؟؟؟؟

----------


## مهدی کرامتی

من دقیقا متوجه نمیشم در مورد شما چه اتفاقی میافته.

من بدون این مشکل و راحت به سرور متصل میشم.

----------


## hr110

با سلام
منظور من اینست که نمیتوان به اسکیوال اتصال پیدا کرد، شاید دیده باشید وقتی که قرار است به اسکیوال متصل شوید دانستن یک شناسه از اسکیوال کافی نیست و باید ابتدا به سرور لاگین نمایید(همانطور که در تنظیمات بالا نمایش داده اید) یعنی علاوه بر شناسه اسکیوال باید یک شناسه از شناسه‌های تعریف شده در ویندوز سرور را هم داشته باشید. همین مسئله کافی است که هر کاربر با دانستن شناسه ویندوز به اطلاعات دسترسی داشته باشد ، معمولاٌ هم در سازمانها کسی حال ندارد که پسورد sa را ایجاد یا تغییر دهد و شما با دانستن همان شناسه به اطلاعات ان سازمان دسترسی داشته باشید.

امیدوارم که منظورم را متوجه شده باشید

----------


## مهدی کرامتی

خیر.

نیازی نیست که حتما از طریق ویندوز نیز در آن سیستم به سرور SQL دسترسی پیدا کنید.

وقتی سیستم ویندوز اجرا میشود حتی اگر به سیستم لوگین نکرده باشید (فرض کنید این سیستم سرور باشد) کاربران میتوانند به سرور متصل شده و عملیات خود را انجام دهند، زیرا سرور SQL بصورت یک سرویس بر روی ویندوز اجرا میشود و بنابراین نیازی نیست برای اتصال به آن حتی به ویندوز لوگین کنید.

----------


## MFCGalaxy

مشکل من هم دقیقا همان چیزی ست که آقای ربیعی مطرح نمودند ...
شرمنده !! ولی  پاسخ جناب کرامتی را درست متوجه نشدم ...
اگه ممکنه کمی بیشتر توضیح بفرمایین...

ممنون..

----------


## JavanSoft

دقیقا حرف آقای کرامتی درست است 
SqlServer شناسایی کاربر را از Windows مجزا می نماید
 در این حالت می توان بدون Login کردن در Windows هم با User/Pass در SqlServer عمل LogIn را انجام داد

----------


## Mohammad S

> در این حالت می توان بدون Login کردن در Windows هم با User/Pass در SqlServer عمل LogIn را انجام داد


و این یعنی خطر! 
چطور می توان این مساله را رفع کرد؟  :idea:

----------


## مهدی کرامتی

> در این حالت می توان بدون Login کردن در Windows هم با User/Pass در SqlServer عمل LogIn را انجام داد
> 			
> 		
> 
> و این یعنی خطر! 
> چطور می توان این مساله را رفع کرد؟  :idea:


میشه بفرمایید این چه خطری داره؟!؟

در یک سیستم سرور مانند سرور شبکه یا وب معمولا هیچ کاربری (بغیر از Administrator، آنهم بندرت و برای انجام مقاصد خاص) با اکانت ویندوز به سرور لوگین نمیکند. 
در این موارد که اصولا SQL Server برای آن طراحی شده است بصورت یک سرویس روی کامپیوتر سرور اجرا میشود، یعنی حتی قبل از لوگین کردن با استفاده از اکانت ویندوز (که اصولا با توجه به مورد فوق الذکر غیر ضروری است) SQL Server اجرا شده و آماده ارائه سرویس است و کاربران مجاز میتوانند پس از احراز هویت از آن استفاده کنند.

حالا شما میفرمایید که برای استفاده از SQL Server باید به ازای هر کاربر یک اکانت در سرور تعریف شود؟!؟!؟

درست برعکس مورد مطرح شده توسط شما، لوگین کردن توسط اکانت ویندوز به سرور خطرناک است، نه لوگین کردن با استفاده از اکانت SQL Server .

----------


## delphi developer

من برای انجام یک پروژه احتیاج به لیست Error Code های BDE یا ADO دارم.

ممنون می شم اگه کمکم کنید.

----------


## hmm

با اجازه از آقای کرامتی
همون طور که ایشان فرمودند اگه در موقع نصب گفته باشید که sqlserver شما با یک یوزر داخلی سرویس بدهد دیگه لازم نیست هر بار که سرور رو restart میکنید به آن حتما لاگین کنید تا بتوانید از سرویسش استفاده کنید
اما در مورد کلاینت که دو راه دارید یکی احراز هویت توسط ویندوزه که در این روش شما باید برای هر کاربر تحت شبکه یک یوزر در sqlserver تعریف کنید یا اینکه از A.D استفاده نمایید (که به نظر من زیاد منطقی نیست)
و در روش دوم که احراز هویت توسط خود sqlserver هستش شما کافیه یک یوزر با حداقل دسترسی (به نسبت اینکه چکارهایی رو میخواهید برنامه انجام دهد) بسازید و در برنامه از طریق آن یوزر به دیتابیس متصل بشید
حتما هم برای sa یک رمز در نظر بگیرید که قابل حدس زدن نباشه

----------


## MH2538

سلام
به طور کل برای اتصال به SQLServer دو راه وجود دارد
1 - Windowsauthentication ‌که خیلی نا امن است
2 - SQLServerAuthentication
در حالت دوم که روش امن و رایجی است می توان username و password ذخیره و به کانکشن پاس داد
مثل این نمونه که در vb  نوشته شده است:
ددر 
cMe.CntSaveUsers.ConnectionString = "workstation id=" &  WorkStationID  & ";packet size=4096;user id=" &  UserName  & "; password =" & Password  & "; data source=" &  Source  & ";persist se" & _
        "curity info=False;initial catalog="&DatabaseName

کلماتی را که باید بعنوان پارامتر ارسال کرد با رنگ قرمز مشخص شده است

----------

