Create TOC

2001년 3월 18일

MySQL

사용자 계정 추가하기

# mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;

위 GRANT 문에서는 세 명의 사용자를 설정한다.

  • monty:어느 곳에서든 서버에 연결할 수 있는 완전한 슈퍼유저이지만 비밀번호를 사용해야 한다. 우리는 monty@localhost 와 monty@"%"를 사용한 GRANT 문에 대해서 반드시 논의를 해 야 한다. localhost 목록을 추가하지 않으면, mysql_install_db 에 의해 생성된 localhost 의 익명 사용자 목록(등록?)이 로컬 호스트에서 접속할때 우선권을 갖는다. 왜냐하면 지정된 Host 필드 값이 있으며 정열 순서에서 먼저 오기 때문이다. (** 승인 테이블의 정열 순서가 특정한 Host를 지정한 것부터 시작하는 것을 기억하자.)
  • admin:비밀번호 없이 localhost에서 접속할 수 있으며 reload와 process 관리자 권한을 승인받은 사용자. 이경우 사용자가 mysqladmin processlist 뿐만 아니라 mysqladmin reload, mysqladmin refresh, mysqladmin flush-* 명령을 실행할 수 있다.데이터 베이스와 관련된 권한은 승인되지 않았다. 이것은 추가적인 GRANT 문을 사용해 나중에 승인할 수 있다.
  • dummy:비밀번호없이 연결할 수 있지만 오직 localhost에서만 연결 가능한 사용자. 권한 유형(privilege type)이 USAGE 이기 때문에 전체적인 권한이 'N'로 설정되어 있다. USAGE 는 아무런 권한도 설정하지 않는다. 나중에 데이터베이스와 관련된 권한을 승인할 수 있다.

2001년 3월 8일

C++/Exceptions

STL에서 exception

header file : <stdexcept>

Exception Classes

domain_errorClass The class serves as the base class for all exceptions thrown to report a domain error.
invalid_argumentClass The class serves as the base class for all exceptions thrown to report an invalid argument.
length_errorClass The class serves as the base class for all exceptions thrown to report an attempt to generate an object too long to be specified.
logic_errorClass The class serves as the base class for all exceptions thrown to report errors presumably detectable before the program executes, such as violations of logical preconditions.
out_of_rangeClass The class serves as the base class for all exceptions thrown to report an argument that is out of its valid range.
overflow_errorClass The class serves as the base class for all exceptions thrown to report an arithmetic overflow.
range_errorClass The class serves as the base class for all exceptions thrown to report a range error.
runtime_errorClass The class serves as the base class for all exceptions thrown to report errors presumably detectable only when the program executes.
underflow_errorClass The class serves as the base class for all exceptions thrown to report an arithmetic underflow.

example

#include <iostream>

using namespace std;

int main( )
{
    // runtime_error
    try
    {
        locale loc( "test" );
    }
    catch ( exception &e )
    {
        cerr << "Caught " << e.what( ) << endl;
        cerr << "Type " << typeid( e ).name( ) << endl;
    };
}

try..catch example code

class Widget 이 있다고 하면,

case 1.

try
{
    Widget w1;          // default constructor is called(object 1)
    throw w1;           // copy constructor is called.(object 1->object 2)
}                       // destructor is called(object 1)
catch (Widget w)        // copy constructor is called(object 2->object3)
{
    throw;              // re-throw object2
}                       // destructor is called(object3)

case 2.

try
{
    Widget w1;          // default constructor is called(object 1)
    throw w1;           // copy constructor is called.(object 1->object 2)
}                       // destructor is called(object 1)
catch(Widget& w)        // copy constructor is not called(reference)
{
    throw;              // re-throw object2
}                       // destructor is not called.

case 3.

try
{
    Widget w1;          // default constructor is called(object 1)
    throw w1;           // copy constructor is called.(object 1->object 2)
}                       // destructor is called(object 1)
catch(Widget& w)        // copy constructor is not called(reference)
{
    throw w;            // copy constructor is called.(object 2->object 3)
}                       // destructor is called(object 2.).

case 4. Effective code

try
{
    throw Widget();     // default constructor is called(object1). copy constructor is called.(object 1->object2).
                        // or no copy construction by a well-known optimization.
}                       // destructor is call(object1) or not by a well-known optimization.
catch(Widget& w)        // copy constructor is not called(reference)
{
    throw;              // re-throw object2(or 1)
}                       // destructor is not called(object 2. or 1).

foo() throw() 구문

foo() throw()

foo() 함수 안에서는 어떠한 exception 도 발생되지 않는다. 만일 exception 이 발생될 경우 std::unexpected() exception이 발생되며 std::unexpected() 의 처리자를 지정하지 않으면 기본으로 std::terminated() 가 호출되고, std::terminated() 에서는 abort() 함수를 호출한다.

foo() throw(...)

foo() 함수에서 임의의 exception 이 발생될 수 있다.

foo() throw(a, b)

foo() 함수에서 a, b 2개의 exception이 발생될 수 있다. 그 외의 exception이 발생하면 std::unexpected() exception이 발생된다.