2015년 2월 25일 수요일

Oracle logon trigger 에서 로그온 제한이 실패할때 ::: Oracle logon trigger not work.

오라클에서 logon 트리거를 이용해 계정 접근제한을 구현할 때 에러를 출력했음으도 불구하고 로그온이 되버리는 계정들이 있다.

이러한 현상은 해당 계정에 ADMINISTER DATABASE TRIGGER 권한이 있을 경우에 발생한다. (해당 권한을 가진 유저는 로그온트리거 접근 제어가 안된다.)

-- 권한 제거
REVOKE ADMINISTER DATABASE TRIGGER TO UserName;

-- 권한 생성
GRANT ADMINISTER DATABASE TRIGGER TO UserName;

2015년 2월 24일 화요일

C# NativeMethods Class 활용 (C,C++ structure, function 사용하기)

C#을 이용해 프로그래밍을 하다보면 기존에 C, C++로 만들어둔 DLL을 사용해야 할 경우가 빈번하게 발생한다.   C#의 가장 강력한 기능중 하나는 C, C++ 라이브러리를 포괄적으로 지원해 준다는 점이다.   사용법은 다음과 같다.

C, C++ (Structure, Function)


#define JK_API __declspec(dllexport)

#ifdef  __cplusplus
extern "C" {
#endif

typedef struct _JK_test_struct{
    int count;
    char name[32];
}JK_test_struct;

JK_API int JK_test_function(JK_test_struct* jkStruct)
{
    // ...
}


#ifdef  __cplusplus
}
#endif



C# NativeMethods Class



namespace JK_space
{
    internal struct JK_test_struct {
        [MarshalAs(UnmanagedType.I4)] 
        public int count;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] 
        public string name;
    };

    internal static class JKNativeMethods
    {
        [DllImport("FSB.dll")]
        [return: MarshalAs(UnmanagedType.I4)]
        internal static extern int JK_test_function(ref JK_test_struct jkStruct);
    }
}



C# Main

namespace JK_space
{
    public class JKTestClass
    {
        public static void Main(string[] args)
        {
            // member variables already memory allocated.
            JK_test_struct jkStruct = new JK_test_struct();

            JKNativeMethods.JK_test_function(ref jkStruct);

            System.Console.WriteLine("count is " + jkStruct.count);
            System.Console.WriteLine("name  is " + jkStruct.name);
        }
    }
}