← يتطلب: إدارة النظام الحوكمة والتشغيل متقدم ⏱ 5 ساعات الدورة 26

الأمان والمصادقة

Security and Authentication

🎯 أهداف التعلم

1فهم نموذج الأمان في IRIS
2تعلم أنواع المصادقة المختلفة
3فهم التفويض (Authorization)
4تعلم التدقيق (Auditing)
5فهم تشفير البيانات
01

نموذج الأمان في IRIS

يعتمد نموذج الأمان في IRIS على الموارد (Resources) والأدوار (Roles) والصلاحيات (Privileges).

// تعريف موارد أمنية
ClassMethod SetupSecurity()
{
    // إنشاء مورد جديد
    Set resource = ##class(Security.Resources).%New()
    Set resource.Name = "HOSPITAL_PATIENT_DATA"
    Set resource.Description = "بيانات المرضى"
    Set resource.PublicPermissions = ""  // لا وصول عام
    Do resource.%Save()
    
    // إنشاء دور مع صلاحيات
    Set role = ##class(Security.Roles).%New()
    Set role.Name = "HOSPITAL_DOCTOR"
    Set role.Description = "صلاحيات الطبيب"
    Set role.Resources = "HOSPITAL_PATIENT_DATA:RW,HOSPITAL_ORDER:RW,HOSPITAL_REPORT:R"
    Do role.%Save()
    
    // إنشاء دور ممرض
    Set role = ##class(Security.Roles).%New()
    Set role.Name = "HOSPITAL_NURSE"
    Set role.Description = "صلاحيات الممرض"
    Set role.Resources = "HOSPITAL_PATIENT_DATA:R,HOSPITAL_VITALS:RW"
    Do role.%Save()
}

// التحقق من الصلاحيات
ClassMethod CheckPermission(resource As %String, permission As %String) As %Boolean
{
    Quit $SYSTEM.Security.Check(resource, permission)
}
02

أنواع المصادقة

تدعم IRIS عدة أنواع من المصادقة.

// المصادقة عبر كلمة المرور
ClassMethod AuthenticatePassword(username As %String, password As %String) As %Boolean
{
    Set user = ##class(Security.Users).OpenId(username)
    If '$ISOBJECT(user) Quit 0
    
    // التحقق من كلمة المرور
    Set valid = user.CheckPassword(password)
    If valid {
        // تسجيل الدخول
        Do ##class(%SYS.System).Login(username)
    }
    Quit valid
}

// المصادقة عبر Kerberos
ClassMethod AuthenticateKerberos() As %Boolean
{
    Set status = ##class(Security.System).Get(.sys)
    If sys("KerberosEnabled") {
        // التحقق من Kerberos ticket
        Set ticket = $SYSTEM.Kerberos.GetTicket()
        Quit ticket '= ""
    }
    Quit 0
}

// المصادقة عبر LDAP
ClassMethod AuthenticateLDAP(username As %String, password As %String) As %Boolean
{
    Set ldapConfig = ##class(Security.LDAPConfig).%New()
    Set ldapConfig.Server = "ldap.hospital.com"
    Set ldapConfig.BaseDN = "dc=hospital,dc=com"
    
    Set status = ldapConfig.Authenticate(username, password)
    Quit $$$ISOK(status)
}

// OAuth2 Authentication
ClassMethod SetupOAuth2()
{
    Set server = ##class(OAuth2.Server.Configuration).%New()
    Set server.Issuer = "https://auth.hospital.com"
    Set server.SupportedGrantTypes = "authorization_code,client_credentials"
    Do server.%Save()
}
03

التدقيق (Auditing)

التدقيق يسجل جميع العمليات الأمنية الحساسة.

// إعداد التدقيق
ClassMethod SetupAuditing()
{
    // تفعيل تدقيق تسجيل الدخول
    Do ##class(Security.Audit).EnableEvent("Login")
    Do ##class(Security.Audit).EnableEvent("LoginFailure")
    
    // تدقيق الوصول للبيانات
    Do ##class(Security.Audit).EnableEvent("DataAccess")
    
    // تدقيق التعديلات
    Do ##class(Security.Audit).EnableEvent("DataChange")
}

// عرض سجلات التدقيق
ClassMethod ViewAuditLog()
{
    Set rs = ##class(Security.Audit).GetEvents()
    While rs.%Next() {
        Write rs.%Get("Time"), " | "
        Write rs.%Get("User"), " | "
        Write rs.%Get("Event"), " | "
        Write rs.%Get("Details"), !
    }
}

// تدقيق مخصص
ClassMethod CustomAudit(action As %String, details As %String)
{
    Set audit = ##class(Hospital.Audit.Log).%New()
    Set audit.Timestamp = $HOROLOG
    Set audit.User = $USERNAME
    Set audit.Action = action
    Set audit.Details = details
    Set audit.IPAddress = %request.CgiEnvs("REMOTE_ADDR")
    Do audit.%Save()
}
04

تشفير البيانات

تشفير البيانات يحميها من الوصول غير المصرح به.

// تشفير البيانات الحساسة
ClassMethod EncryptData(data As %String) As %String
{
    Set key = ##class(%Library.Encryption).GetKey("HospitalKey")
    Set encrypted = ##class(%Library.Encryption).Encrypt(data, key)
    Quit encrypted
}

ClassMethod DecryptData(encrypted As %String) As %String
{
    Set key = ##class(%Library.Encryption).GetKey("HospitalKey")
    Set decrypted = ##class(%Library.Encryption).Decrypt(encrypted, key)
    Quit decrypted
}

// تشفير كلمة المرور
ClassMethod HashPassword(password As %String) As %String
{
    Set salt = $SYSTEM.Encryption.GenCryptRand(16)
    Set hash = $SYSTEM.Encryption.SHAHash(256, password _ salt)
    Quit salt _ ":" _ hash
}

// التحقق من كلمة المرور
ClassMethod VerifyPassword(password As %String, stored As %String) As %Boolean
{
    Set salt = $PIECE(stored, ":", 1)
    Set hash = $PIECE(stored, ":", 2)
    Set computed = $SYSTEM.Encryption.SHAHash(256, password _ salt)
    Quit (computed = hash)
}

// SSL/TLS Configuration
ClassMethod SetupSSL()
{
    Set ssl = ##class(Security.SSLConfigs).%New()
    Set ssl.Name = "HospitalSSL"
    Set ssl.Description = "SSL for Hospital APIs"
    Set ssl.CertificateFile = "/certs/server.crt"
    Set ssl.PrivateKeyFile = "/certs/server.key"
    Set ssl.Password = "***"
    Do ssl.%Save()
}

📝 اختبار التحقق

1 ما هي الموارد (Resources) في نموذج أمان IRIS؟
A ملفات النظام
B كيانات أمنية تحدد الوصول للبيانات
C قواعد البيانات
D المستخدمين
💡 الشرح

الموارد هي كيانات أمنية تحدد من يمكنه الوصول للبيانات والعمليات.

2 ما هو الهدف من التدقيق (Auditing)؟
A تحسين الأداء
B تسجيل العمليات الأمنية الحساسة
C إدارة المستخدمين
D نسخ البيانات
💡 الشرح

التدقيق يسجل جميع العمليات الأمنية الحساسة للمتابعة والتحليل.

ما هي مستويات الأمان في IRIS؟
💡 الشرح

IRIS يوفر أمان متعدد الطبقات: مصادقة، تفويض، تدقيق، تشفير، وحماية البيانات

💡 النقاط الرئيسية

  • نموذج الأمان يعتمد على Resources وRoles وPrivileges
  • IRIS يدعم عدة أنواع من المصادقة
  • التدقيق يسجل العمليات الأمنية الحساسة
  • تشفير البيانات يحميها من الوصول غير المصرح به
  • SSL/TLS يؤمن الاتصالات