এসএসএমএস-এর মাধ্যমে নির্দিষ্ট লগইনে এসকিউএল সার্ভারের অ্যাক্সেসকে কীভাবে অস্বীকার করা যায়, তবে নেট স্ক্যালক্লায়েন্ট ডেটা সরবরাহকারীকে অনুমতি দিন


10

আমাদের এমন একটি পরিস্থিতি রয়েছে যেখানে বিকাশকারীদের কোনও UPDATEঅনুমতি নেই, তবে তারা অ্যাপ্লিকেশনগুলির সাথে কাজ করে এবং সংযোগের স্ট্রিংগুলি দেখে -> তারা কিছু এসকিউএল অ্যাকাউন্ট (উদাহরণস্বরূপ SQLLogin1) যেগুলিতে আপডেটের অনুমতি রয়েছে তার পাসওয়ার্ডগুলি জানে । আমাদের ক্রিয়াকলাপগুলি বর্তমানে নিখুঁত নয়, এবং কখনও কখনও উত্পাদনের ডেটা সংশোধন করা প্রয়োজন (এখনও এর জন্য কোনও জিইউআই নেই)।

ডিবিএর সাথে যোগাযোগের পরিবর্তে এবং তাকে ডেটা সংশোধন করতে বলার পরিবর্তে, বিকাশকারী (ভুলভাবে) এসকিউএল অ্যাকাউন্ট SQLLogin1(যেটিতে ডেটা সংশোধন করার অনুমতি রয়েছে ) ব্যবহার করবেন এবং ডেটা নিজেই সংশোধন করার জন্য এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর সাথে সংযোগ স্থাপন করবেন connect

ডিবিএ SQLLogin1ডেভেলপার ছাড়া নতুন সংযোগের স্ট্রিং এবং নতুন পাসওয়ার্ড না দেখে পাসওয়ার্ড পরিবর্তন করতে পারে না , যেহেতু অ্যাপ্লিকেশন সংযোগ স্ট্রিং ব্যবহার করে SQLLogin1যা বিকাশকারী বজায় রাখে।

প্রশ্ন:

SQLLogin1এসকিউএল লগইনে অ্যাক্সেস অস্বীকার করার কোনও উপায় আছে , তবে কেবল যদি এটি এসএসএমএসের সাথে সংযোগ স্থাপন করে?

একই SQLLogin1সাথে যদি সংযোগ স্থাপন করা হয় .Net SqlClient Data Provider( program_nameএর মধ্যে sys.dm_exec_sessions) তবে এটি অবশ্যই লগইন করার অনুমতি দিতে হবে।

এইভাবে আমরা বিকাশকারীকে এসএসএমএস ব্যবহার করে সংযুক্ত হতে দিতে চাই না SQLLogin1, যখন যে অ্যাপ্লিকেশনটি ব্যবহার করা হচ্ছে SQLLogin1, তখনও সংযোগ করতে সক্ষম হবে।

উত্তর:


11

আপনি কাস্টম লগন বৈধকরণ করতে সার্ভার লগন ট্রিগার ব্যবহার করতে পারেন এবং যখনই আপনি ফিট দেখেন সেগুলি প্রত্যাখ্যান করতে পারেন। আপনি যদি এসএসএমএস ব্যবহার করে থাকেন তবে আপনি এই ট্রিগারটি "সার্ভার অবজেক্টস" এর নীচে এবং "ট্রিগার" এর ভিতরে তালিকাভুক্ত দেখতে পাবেন।

উদাহরণ স্বরূপ:

CREATE TRIGGER strRejectSSMSConnectionForSQLLogin1
ON ALL SERVER FOR LOGON
AS
BEGIN

    IF ORIGINAL_LOGIN() = N'SQLLogin1' AND PROGRAM_NAME() LIKE N'Microsoft SQL Server Management Studio%'
    BEGIN
        RAISERROR('Direct connection by SSMS refused.', 16, 1)
        ROLLBACK
    END

END

ট্রিগারটির ROLLBACKঅভ্যন্তরটি সংযোগটিকে প্রত্যাখ্যান করবে (লগনের ইভেন্টে কলটিতে মোড়ক দেওয়ার একটি অন্তর্নিহিত লেনদেন রয়েছে)।

লগন ট্রিগারগুলি প্রয়োগ করার সময় সতর্কতা অবলম্বন করুন, যদি সঠিকভাবে কোডিং না দেওয়া হয় তবে আপনি লগইনগুলি প্রত্যাখ্যান করবেন যা লগইন করতে সক্ষম হবে (আপনার নিজেরও!)! প্রথমে পরীক্ষা / দেব পরিবেশে পরীক্ষা করার বিষয়টি নিশ্চিত করুন।

মনে রাখবেন যে সেশনটি তৈরি হওয়ার আগে এই কোডটি কার্যকর করা হয়েছে , সুতরাং সেশন আইডিতে (এসপিআইডি) নির্ভর নির্ভর সিস্টেমের ভিউগুলিতে রোলব্যাক বা উচ্চ ব্যর্থতা ছাড়াই ট্রিগারগুলি শেষ না হওয়া অবধি বর্তমানে পরীক্ষিত লগইনটি থাকবে না।


ধন্যবাদ! প্রশ্ন - যদি আমি লগন ট্রিগারে কোনও ভুল করি এবং এটি সিসাদমিন অ্যাকাউন্টকে লগ ইন করা থেকে আটকা দেয় তবে এসকিউএল সার্ভারে প্রবেশ করার এবং লগন ট্রিগার অক্ষম করার কোনও উপায় কি এখনও আছে?
আলেক্সি ভিটস্কো

3
আপনি যদি কোনও ডিএসি (ডেডিকেটেড অ্যাডমিনিস্ট্রেটর সংযোগ) এর সাথে সংযোগ স্থাপন করেন তবে আপনি এটি লক্ষ্যবস্তু না করে ট্রিগার ফেলে দিতে পারেন। এটি একটি নির্দিষ্ট একক-ব্যবহারকারীর সংযোগ যা আপনি যখনই সমস্যাগুলি ভুল হয়ে যায় সার্ভারের বিরুদ্ধে দিতে পারেন। এটি সাধারণত স্কয়ার সিএমসিডি সহ সরাসরি ব্যবহৃত হয় তবে আপনি এটি এসএসএমএসের মাধ্যমেও করতে পারেন। ডকস.মাইক্রোসফট.এইন
ইউএস /

6
বিকাশকারী কোনও আলাদা সরঞ্জাম ব্যবহার না করা অবধি এটি কয়েক মিনিটের জন্য কাজ করবে। অনুমতি সহ কোনও লগইন জানা থাকলে আপনি কেবল একজন ভাল বিকাশকারীকে বাইরে রাখতে পারবেন না।
জো

3
এটি কোনও সুরক্ষা সমাধানের চেয়ে নীতিগত সমাধান more লগন ট্রিগার এটি স্পষ্ট করে দেয় যে সরাসরি উত্পাদন ডাটাবেসে সংযুক্ত হওয়া নীতিবিরোধী। এবং যেহেতু এটি অসম্ভাব্য যেহেতু আপনি প্রকৃতভাবে দূষিত বিকাশকারীকে রক্ষা করতে পারেন , এটি যথেষ্ট ভাল হতে পারে।
ডেভিড ব্রাউন - মাইক্রোসফ্ট

1
@voo আমার স্পষ্ট করা উচিত ছিল। আপনি উত্পাদন পরিবেশে অ্যাক্সেস সহ দূষিত বিকাশকারীদের বিরুদ্ধে রক্ষা করতে পারবেন না ।
ডেভিড ব্রাউন - মাইক্রোসফ্ট

13

আমি মনে করি যে আপনার সমস্যার কোনও নির্ভরযোগ্য সমাধান নেই যেহেতু কোনও ব্যবহারকারী কর্তৃক ক্যাম Application Nameপরিবর্তন করা যায় modparameter

এটির মধ্যে এটি কীভাবে পরিবর্তন করা যায় তা এখানে SSMS:

ইন Connect to Database Objectডায়ালগ বিকল্প, খোলা চয়ন Additional Connection Parametersএবং জন্য যেকোনো নাম চয়ন Application Nameভালো:

এখানে চিত্র বর্ণনা লিখুন

এখন sys.dm_exec_sessionsডিএমভি এবং প্রোগ্রাম_নাম () আপনাকে Application Nameপ্যারামিটারে আপনার সংযোগ স্ট্রিংয়ে কী পাস করেছে তা আপনাকে দেখাবে :

এখানে চিত্র বর্ণনা লিখুন


4

অন্যান্য উত্তরে ইতিমধ্যে বিস্তারিত হিসাবে আপনি কোনও নির্দিষ্ট ক্লায়েন্টকে কেটে ফেলতে পারবেন না।

সমাধানটি হ'ল বিকাশকারীর অ্যাকাউন্টগুলি থেকে উত্পাদন সিস্টেমে অ্যাক্সেস সুবিধাগুলি সরিয়ে ফেলা।

যে কোনও পরিবর্তন অবশ্যই স্ক্রিপ্ট করা উচিত এবং একটি ডিবিএ স্ক্রিপ্ট চালাবে।

স্থাপনা একটি সিসাদমিন দ্বারা সঞ্চালিত হয়; ডেভস একটি প্যাকেজ উত্পাদন করে যা তারা যথাযথ সুযোগ-সুবিধা সহ কাউকে দেয় এবং উত্পাদন সিস্টেমগুলিতে ব্যবহৃত কনফিগারগুলি কখনই ডেভগুলি দেখতে পায় না।

প্রয়োজনীয় সমাধানের জন্য পছন্দসই সমাধান হিসাবে বা অস্থায়ী অ্যাকাউন্ট হিসাবে কোনও স্টেজিং পরিবেশে উত্পাদন ডেটার অনুলিপি সহ কেস ভিত্তিতে ডিবাগিংয়ের ব্যবস্থা করা হয়।


4
  1. আদর্শ অর্থে, এটি একটি প্রক্রিয়া / নীতি / পরিচালনার সমস্যা। এমনকি যদি কেউ পাসওয়ার্ড জেনেও থাকে তবে কারও পক্ষে প্রোডাকশনের সাথে সংযোগ স্থাপনের জন্য কিন্তু কোনও ডিবিএর সংস্থার নীতির বিরুদ্ধে থাকলেও (ভাল, আপনার কাছে একটি রিলিজ ইঞ্জিনিয়ারিং টিম এবং / অথবা সিস অ্যাডমিন ইত্যাদি থাকতে পারে), এবং নিয়ম ভঙ্গ করার জন্য শাস্তিও রয়েছে, তারপর যে করা উচিত যথেষ্ট (বলা যাচ্ছে যে অনুরূপ বিধিতে প্রয়োগ করা হয়)।

  2. কোনও নির্দিষ্ট অ্যাপ্লিকেশনটিকে সংযোগ থেকে আটকাতে চেষ্টা করা অসম্ভব। সিপুপিক যেমন প্রদর্শিত হয়েছে , "প্রোগ্রামের নাম" পরিবর্তন করা মোটামুটি সহজ। তবে বিকাশকারী এটি বুঝতে না পারলেও এসকিউএল সার্ভারের সাথে সংযুক্ত হতে পারে এমন প্রচুর পরিমাণে প্রোগ্রাম রয়েছে। বেশিরভাগ লোকের এসকিউএলসিএমডি.এক্সে এবং এমনকি অবহিত ওএসকিউএল.এক্সে অ্যাক্সেস থাকবে । বিকাশকারী ভিজ্যুয়াল স্টুডিওর মধ্যে থেকে সংযোগ করতে পারে এবং তারা "। নেট স্ক্যালক্লায়েন্ট ডেটা সরবরাহকারী" এর মাধ্যমে সংযোগ করতে নিজস্ব অ্যাপ তৈরি করতে পারে। ওহ, এবং এখন আমাদের কাছে অ্যাজুরে ডেটা স্টুডিও রয়েছে। এটি মাত্র অনেক।

  3. তবুও, আমরা অন্য দিক থেকে এটি এগিয়ে গেলে এটি এখনও সম্ভব হতে পারে: অ্যাপ্লিকেশন এক্সকে সংযোগ স্থাপন থেকে বিরত করার পরিবর্তে, কেবলমাত্র অ্যাপ্লিকেশন ওয়াইকে সংযুক্ত হওয়ার অনুমতি দেওয়া কীভাবে? অবশ্যই, আমরা আবার "প্রোগ্রামের নাম" এ getুকে পড়ি এমনকি "হোস্টনেম" কেও ফাঁকি দেওয়া যেতে পারে, তবে আমি নিশ্চিত যে ক্লায়েন্টের আইপি অ্যাড্রেসটি ফাঁকি দেওয়া যায় না (কমপক্ষে সংযোগের স্ট্রিং কীওয়ার্ডগুলির মাধ্যমে নয়)। আপনি অ্যাপ্লিকেশন সার্ভারের আইপি ঠিকানা জানেন, বা এটি sys.dm_exec_connectionsডিএমভি ( client_net_addressক্ষেত্রের) থেকে সহজেই খুঁজে পেতে পারেন ।

    ইজলো প্রস্তাবিত লগন ট্রিগার দিয়ে শুরু করে , আমরা যুক্তিটি সংশোধন করতে পারি যা সংযোগটি বৈধ আছে কি না তা নিম্নলিখিতটি নির্ধারণ করে:

    IF (ORIGINAL_LOGIN() = N'SQLLogin1'
        AND (
                 CONVERT(VARCHAR(10), CONNECTIONPROPERTY('net_transport')) <> 'TCP'
              OR CONVERT(VARCHAR(10), CONNECTIONPROPERTY('client_net_address')) <> '10.10.10.10'
     -- uncomment below (and comment-out line above) if app uses multiple IP addresses
     --       OR CONVERT(VARCHAR(10), CONNECTIONPROPERTY('client_net_address'))
     --                   NOT IN ( '10.10.10.10', '10.10.10.11', ...)
            ))
    BEGIN
        RAISERROR('Non-application connection refused.', 16, 1);
        ROLLBACK;
    END;

    এখনকার একমাত্র উপায় হ'ল হয় প্রোডাকশন মেশিনে লগইন করা, বা তাদের ওয়ার্কস্টেশনটি অ্যাপ্লিকেশন সার্ভারের আইপি ফাঁকি দেওয়া। আশা করি প্রোডাকশনে লগ করার জন্য ডিভসের কোনও অ্যাক্সেস নেই। এবং কোনও নেটওয়ার্কে বিদ্যমান আইপি ছদ্মবেশজনিত সমস্যাগুলির সৃষ্টি করে যা উত্পাদনকে প্রতিকূলভাবে প্রভাবিত করতে পারে, তাই তারা এটি চেষ্টা করবে না, তাই না? রাইট?


1

আমি আগে এমন একটি সংস্থার জন্য কাজ করেছি যার একটি বিকাশকারীর সাথে এই সমস্যা ছিল। তাকে বরখাস্ত করা হয়েছে, তবে আমরা একটি সারণীও প্রয়োগ করেছি যাতে একটি লগইন ট্রিগারটির মাধ্যমে লগইননাম এবং অনুমোদিত ম্যাসাইন (অ্যাপ্লিকেশন সার্ভার) ছিল। এটি আমাদের সমস্যাগুলি সমাধান করেছে। অথবা এটি গুলি ছোঁড়ার কারণে হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.