PDA

View Full Version : مشکل rule فایروال در اتصال به sql server در برنامه C#‎



noronet
جمعه 06 شهریور 1394, 19:03 عصر
سلام یه برنامه ی c# نوشتم که تحت شبکه است به بانک اطلاعاتی متصل است . در حالتی که فایروال خاموش باشه مشکلی نیست ولی هنگام روشن بودن فایروال ارتباط برفرار نمیشه.
مشکل نمیدونم کجاست ولی تا وقتی که فایروال dis نشه کار نمیکنه این تنظیماته رول منه ... ایا اشکالی داره ؟؟

profile : ANY
enable:yes
action:allow
override:no
program:ANY
local&remote address: ANY
protocol:TCP
localport:1433
بقیه پارامتر ها هم any هست

و همچین personal firewall هم توی auto + excep rules هست

veniz2008
جمعه 06 شهریور 1394, 21:32 عصر
سلام.
احتمالا شماره پورتی که به SQL اختصاص داده شده، 1433 نیست.
گرچه این 1433 شماره پورت پیش فرض هست ولی در بسیاری از مواقع وقتی روی سیستم مشتری sql نصب میشه یک شماره پورت دیگه برای sql اختصاص داده میشه که بایستی از اون شماره استفاده کنید.
برید توی تنظیمات sql و شماره پورت اختصاص داده شده رو پیدا کنید.

noronet
جمعه 06 شهریور 1394, 21:51 عصر
سلام دقیقا باید ازکجا بفهمم پورتش چی هست ؟؟ توی sql config manager همه رو زده 1433 ولی dynamic port توی ipall رو زده 1557

veniz2008
جمعه 06 شهریور 1394, 22:07 عصر
سلام دقیقا باید ازکجا بفهمم پورتش چی هست ؟؟ توی sql config manager همه رو زده 1433 ولی dynamic port توی ipall رو زده 1557
دقیقا همون مهم هست (مقدار جلوی TCP Dynamic Ports مهم هست).

noronet
جمعه 06 شهریور 1394, 23:22 عصر
پورتها رو تو برنامه و تو رول تغيير دادم . ولي باز خطا گرفت . ايا بايد جاي ديگه هم تغيير بدم ؟مثلا تو ساير پورتهاي ديگه که تو قسمت بالا گفتم

veniz2008
شنبه 07 شهریور 1394, 11:31 صبح
پورتها رو تو برنامه و تو رول تغيير دادم . ولي باز خطا گرفت . ايا بايد جاي ديگه هم تغيير بدم ؟مثلا تو ساير پورتهاي ديگه که تو قسمت بالا گفتم
کل کاری که باید انجام بدید اینه که یک Rule تعریف کنید و درون اون برای شماره پورتی که سرویس sql از اون استفاده میکنه، اجازه دسترسی صادر کنید.
حالا این Rule کجا باید تعریف بشه بستگی داره فایروال شما توسط کی داره مدیریت میشه. یا نرم افزار امنیتی روی سیستم نصب هست یا فایروال خود ویندوز.
بهرحال مطمئن بشید که روند کار رو بدرستی انجام میدید.
اگر مشکل رفع نشد یک عکس کامل از قسمت sql که مربوط به شماره پورت ها هست رو قرار بدید.

noronet
شنبه 07 شهریور 1394, 12:40 عصر
کد برنامه


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;


namespace cup
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{



string std = "Data Source=192.168.1.50,1557;Network Library=DBMSSOCN;Initial Catalog=student;User ID=Main_DB;Password=1371;";










SqlConnection con = new SqlConnection();
con.ConnectionString = std;
con.Open();


SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO name_std (id,name)" + "VALUES (" + 11 + ",'Hamid')";


cmd.ExecuteNonQuery();
MessageBox.Show("Added Successfully!");
con.Close();






}
}
}








134710

veniz2008
شنبه 07 شهریور 1394, 13:30 عصر
مقدار TCP Dynamic Ports رو به یک عددی تغییر بدید(مثلا 1433) و OK کنید. بعدش Instance مربوط به sql رو ریست کنید (توی همین پنجره Sql Configuration و از قسمت SQL Server Service به Instance مربوط به sql دسترسی دارید). بعد از ریست دوباره برید شماره پورت رو بررسی کنید تا مطمئن بشید که شماره پورت عوض نشده (بعضی مواقع ممکنه عوض بشه هرچند زیاد احتمالش نیست). بهرحال اگر مقدارش تغییر کرد مقدار جدید رو در کانکشن استرینگ وارد کنید.
ولی من احتمال میدم که شما Rule رو درست تعریف نمی کنید. اگر مشکل حل نشد دستور اتصال به دیتابیس رو بذارید توی یک Try و Catch و درون catch متن خطا رو بدست بیارید و یک عکس از خطای رخ داده قرار بدید.