SQL Server 2005에서는 소유자 스키마를 소유하고 스키마 오브젝트를 소유합니다.

> 기호의 벌어진 쪽이 좁혀진 쪽을 소유한다는 의미로 사용했을 , 다음과 같이 표현할 있습니다.

소유자 > 스키마 > 오브젝트

 

따라서 소유자를 삭제할 경우에는 삭제할 소유자가 소유한 스키마의 소유권을 새로운 소유자에게 이전한 기존 소유자를 삭제하면 됩니다.

다음의 쿼리를 줄씩 실행해보시면 소유자 확인 이전, 삭제의 방법을 알게 되시리라 생각합니다.

반드시 충분한 테스트를 해보시고 실전에 사용하시기 바랍니다. ^^;;;

 

 

- SQL Server 2005 경우

 

00

/*************************************************************/

01

-- 사용자와 관련 오브젝트 목록 확인 사용자 삭제 - SQL Server 2005

02

/*************************************************************/

03

USE master;

04

GO

05

 

06

/*************************************************************/

07

/**-- 테스트를 위한 사용자, 스키마, 테이블 생성--------------------------*/

08

 

09

-- 테스트 데이터 베이스 생성

10

CREATE DATABASE AccTestDB;

11

 

12

-- 로그인 생성

13

CREATE LOGIN AccountTestA WITH PASSWORD = 'test1';

14

CREATE LOGIN AccountTestB WITH PASSWORD = 'test2';

15

GO

16

 

17

-- 사용자 생성

18

USE AccTestDB;

19

GO

20

CREATE USER AccountTestA FOR LOGIN AccountTestA WITH DEFAULT_SCHEMA = AccSchema;

21

CREATE USER AccountTestB FOR LOGIN AccountTestB WITH DEFAULT_SCHEMA = AccSchema;

22

GO

23

 

24

-- 테이블 생성 권한을 위한 역할 추가

25

EXEC sp_addrolemember 'db_owner', 'AccountTestA';

26

EXEC sp_addrolemember 'db_owner', 'AccountTestB';

27

GO

28

 

29

-- 스키마 생성

30

CREATE SCHEMA AccSchema AUTHORIZATION AccountTestA;

31

 

32

-- 사용자 생성 확인

33

SELECT * FROM sys.sysusers;

34

SELECT * FROM sys.schemas;

35

 

36

-- SQL Server 2005에서는 소유자.테이블이 아닌 스키마.테이블로 테이블을 생성

37

EXECUTE AS LOGIN = 'AccountTestA';

38

GO

39

CREATE TABLE AccSchema.AccTable (Col1 int);

40

GO

41

 

42

/*************************************************************/

43

/**-- AccountTestA 소유자인 오브젝트 목록 조회-------------------------*/

44

SELECT u.name as UserName, s.name as SchemaName, o.Type as ObjectType, o.name as ObjectName

45

FROM sys.sysusers u

46

JOIN sys.schemas s ON u.uid = s.principal_id

47

JOIN sys.objects o ON s.schema_id=o.schema_id

48

WHERE u.name = 'AccountTestA'

49

 

50

/*************************************************************/

51

/**-- SQL Server 2005에서는 소유자가 스키마를 소유하고

52

스키마가 오브젝트를 소유하기 때문에

53

        소유자를 삭제할 경우에는 오브젝트를 삭제하지 않고

54

삭제할 소유자가 소유한 스키마의 소유권을 이전한 ,

55

소유자를 삭제한다. --*/

56

 

57

-- 소유자삭제

58

DROP USER AccountTestA

59

/*

60

메시지15138, 수준16, 상태1, 1

61

데이터베이스 보안 주체는 데이터베이스의 스키마을() 소유하며 삭제할 없습니다.

62

*/

63

 

64

-- AccountTestA 소유자인 테이블 목록 조회

65

SELECT u.name as UserName, s.name as SchemaName

66

FROM sys.sysusers u JOIN sys.schemas s ON u.uid = s.principal_id

67

WHERE u.name = 'AccountTestA'

68

 

69

-- 소유권 이전

70

ALTER AUTHORIZATION ON SCHEMA::AccSchema TO AccountTestB;

71

GO

72

 

73

-- 삭제하려는 소유자를 가진 테이블 삭제 , 사용자 삭제

74

DROP USER AccountTestA;

75

GO

76

SELECT * FROM sys.sysusers WHERE name = 'AccountTestA';

77

GO

78

/*

79

메시지916, 수준14, 상태1, 1

80

현재 보안 컨텍스트로는 서버 보안 주체 "AccountTestA"() 데이터베이스 "AccTestDB" 액세스 없습니다.

81

 

82

*/

83

 

84

/*************************************************************/

85

-- 데이터베이스 삭제

86

REVERT;

87

 

88

USE master;

89

DROP DATABASE AccTestDB;

90

 

91

-- 로그인 삭제

92

DROP LOGIN AccountTestA;

93

DROP LOGIN AccountTestB;

 

 

 

- SQL Server 2000 경우

 

00

/*************************************************************/

01

-- 사용자와 관련 오브젝트 목록 확인- SQL Server 2000

02

/*************************************************************/

03

USE master;

04

GO

05

 

06

/*************************************************************/

07

/**-- 테스트를 위한 사용자 테이블 생성----------------------------------------------*/

08

 

09

-- 테스트 데이터베이스 생성

10

CREATE DATABASE AccTestDB

11

GO

12

 

13

-- 로그인 생성

14

EXEC sp_addlogin 'AccountTest', 'test', 'AccTestDB'

15

 

16

-- 사용자 생성

17

USE AccTestDB

18

GO

19

EXEC sp_adduser 'AccountTest'

20

GO

21

 

22

-- 테이블 생성 권한을 위한 역할 추가

23

EXEC sp_addrolemember 'db_owner', 'AccountTest'

24

 

25

-- 사용자 생성 확인

26

SELECT * FROM sysusers WHERE name = 'AccountTest'

27

 

28

-- 실행 사용자를 AccountTest 변경

29

SETUSER 'AccountTest'

30

 

31

-- 관련 테이블 생성

32

CREATE TABLE AccTable (Col1 int)

33

 

34

 

35

/*************************************************************/

36

/**-- AccountTest 소유자인 오브젝트 목록 조회-------------------------------------*/

37

SELECT o.xType as ObjectType, u.name as UserName, o.name as ObjectName

38

FROM sysusers u JOIN sysobjects o ON u.uid=o.uid

39

WHERE u.name = 'AccountTest'

40

 

41

 

42

/*************************************************************/

43

/**-- 소유자 삭제 테스트-------------------------------------------------------------------*/

44

-- 소유자 삭제

45

EXEC sp_dropuser 'AccountTest'

46

/*

47

서버: 메시지15183, 수준16, 상태1, 프로시저sp_MScheck_uid_owns_anything, 17

48

데이터베이스의 개체를 소유하고 있으므로 사용자를 삭제할 없습니다.

49

*/

50

 

51

-- AccountTest 소유자인 테이블 목록 조회

52

SELECT u.name, o.name FROM sysusers u JOIN sysobjects o ON u.uid=o.uid

53

WHERE u.name = 'AccountTest' and o.xType='U'

54

 

55

-- 로그인 생성

56

SETUSER

57

EXEC sp_addlogin 'AccountTest2';

58

 

59

-- 사용자 생성

60

EXEC sp_adduser 'AccountTest2';

61

 

62

-- 소유자 이전

63

EXEC sp_changeobjectowner 'AccountTest.AccTable' , 'AccountTest2';

64

/*

65

주의: 개체 이름부분을 변경하면 스크립트나 저장프로시저를 손상시킬 있습니다.

66

*/

67

 

68

-- 소유자 삭제 재시도

69

EXEC sp_dropuser 'AccountTest'

70

 

71

-- 로그인 삭제

72

EXEC sp_droplogin 'AccountTest'

73

 

74

-- 확인

75

SELECT * FROM master.dbo.SYSXLOGINS

76

SELECT * FROM SYSUSERS

77

 

78

/**--테스트 완료------------------------------------------------------------------------*/

79

-- 데이터베이스 삭제

80

USE master

81

DROP DATABASE AccTestDB

82

 

83

-- 로그인 삭제

84

EXEC sp_droplogin 'AccountTest2'

85

 

86

-- 확인

87

SELECT * FROM master.dbo.SYSXLOGINS

88

SELECT * FROM SYSUSERS

 

 

[출처] [MS SQL] 사용자 계정과 관련된 오브젝트 확인 및 삭제 (서버관리 마스터 - OS, WAS, DB, Network)



 

기존 로그인 확인


sp_hleplogins -- 기존 로그인 전체를 보여줌

sp_helplogins 'sa'  -- sa 계정에 대한 로그인 정보


로그인 생성과 삭제 


----- window 계정 --------------------------------------------------------------------

exec sp_grantlogin 'testuser' -- db접근 포함, 비번필요없음

exec sp_revokelogin 'testuser'

--------------------------------------------------------------------------------------


----- sql server 계정 -----------------------------------------------------------------  

exec sp_addlogin 'kimes','pwd123','test' -- '계정이름', '비밀번호','디폴트DB'

exec sp_droplogin 'kimes'

---------------------------------------------------------------------------------------


----- 로그인 유저 확인 ----------------------------------------------------------------

select name from master.dbo.sysxlogins

---------------------------------------------------------------------------------------


----- 암호 변경------------------------------------------------------------------------

exec sp_password 'kimes','kimes1234','kimes' -- '기존비번','새 비번','계정이름'

--------------------------------------------------------------------------------------


DB에 사용자 등록 


----- DB접근 권한 -------------------------------------------------------------------

use TEST

exec sp_grantdbaccess 'kimes'      -- 사용자 'kimes'에게 TEST DB에 접근허가(등록)

exec sp_revokedbaccess 'kimes'     -- 'kimes'의 TEST DB의 접근권한을 빼앗음(제거)

--------------------------------------------------------------------------------------


----- 현재 DB의 사용자 확 ---------------------------------------------------------

use TEST

select name from sysusers where islogin = 1

-------------------------------------------------------------------------------------


권 한 


----- OBJECT 사용권한 --------------------------------------------------------------

use TEST


grant select,delete,update,insert        -- select,delete,update,insert 권한을 

   on a                                  -- TEST DB의 a 라는 테이블에

   to kimes                              -- 'kimes'에게 허락


revoke delete                            -- delete 권한 취소

    on a

    to kimes


exec sp_helprotect a,null                -- a 테이블에 대해 주어진 권한보기


grant select(id,name)                    -- id,name이라는 특정 컬럼에만 select권한 허락

   on a

   to kimes


exec sp_helprotect null,kimes            -- 특정 컬럼에만 주어진 권한보기

-------------------------------------------------------------------------------------


----- statement 사용권한 -----------------------------------------------------------


grant create table                         -- create table 권한을                                      

   to kimes                                -- 'kimes'에게 허락


revoke create table                        -- create table 권한 취소

    to kimes

-------------------------------------------------------------------------------------


역 할 


----- server 역할 -------------------------------------------------------------------


exec sp_addsrvrolemember 'kimes','sysadmin'       -- system Administrator 권한 허락                                      


exec sp_dropaddsrvrolemember 'kimes','sysadmin'   -- system Administrator 권한 취소


exec sp_helpsrvrolemember 'sysadmin'              -- 서버역할 구성원 확인 

                                                  -- sysadmin 생략하면 전체 구성원 확인

-------------------------------------------------------------------------------------


----- database 역할 -----------------------------------------------------------------


exec sp_addrolemember 'db_owner','kimes'          -- DB 소유자 권한 허락


exec sp_droprolemember 'db_owner','kimes'         -- DB 소유자 권한 취소


exec sp_helprolemember 'db_datawrite'             -- DB역할 구성원 확인


-------------------------------------------------------------------------------------


from : http://yyrooyhh.tistory.com/

초보 관리자/DB 2009/01/29 11:24 by 비트센스
 
짬짬히 이런 저런 작업을 하면서 글을 쓰기 때문에,
실제 사용하는 것만 올립니다. 덕분에 글이 짧네요.

MSSQL에서 날짜 연산 방법입니다.

예. 어제 일자를 알고 싶다.
select getdate(), dateadd(d, -1, getdate())
쉽죠? ^^;;

연산 날짜 부분(datepart) 인지는 몇개 없습니다.

yy : 년
mm : 월
dy, y : dayofyear (먼지 잘 모르겠음)
d : 일
wk : 주
hh : 시
mi, n : 분
s : 초
ms : 밀리세컨드

declare @날자 datetime

set @날자='2008-01-01'

---현재월의 초일 --
SELECT dateadd(d,-day(@날자)+1,@날자)

---현재월의 말일 --
SELECT dateadd(d,-day(dateadd(m,1,@날자)), dateadd(m,1,@날자))

---전월의 초일 --
SELECT dateadd(m,-1, dateadd(d,-day(@날자)+1,@날자))

---전월의 말일 --
SELECT dateadd(d,-day(@날자),@날자)

== 또다른 매달말일 구하는 법
SELECT CONVERT(Char(8), DateAdd(day, -1, DateAdd(month, 1, @종료월 + '01')), 112)

'Database > SQL-Server' 카테고리의 다른 글

DBCC 명령어  (0) 2011.06.29
DBCC CHECKDB, CHECKTABLE (손상된 테이블 복구)  (0) 2011.06.27
[MSSQL] 날짜 연산 DATEADD  (0) 2011.05.13
MSSQL Date Type Convert  (0) 2011.05.13
[MSSQL - SELECT 와 INSERT 동시 처리]  (0) 2011.05.09
0 Feb 22 2006 4:26PM CONVERT(CHAR(19), DATETIME, 0)
1 02/22/06 CONVERT(CHAR(8), DATETIME, 1)
2 06.02.22 CONVERT(CHAR(8), DATETIME, 2)
3 22/02/06 CONVERT(CHAR(8), DATETIME, 3)
4 22.02.06 CONVERT(CHAR(8), DATETIME, 4)
5 22-02-06 CONVERT(CHAR(8), DATETIME, 5)
6 22 Feb 06 CONVERT(CHAR(9), DATETIME, 6)
7 Feb 22, 06 CONVERT(CHAR(10), DATETIME, 7)
8 16:26:08 CONVERT(CHAR(8), DATETIME, 8)
9 Feb 22 2006 4:26:08:020PM CONVERT(CHAR(26), DATETIME, 9)
10 02-22-06 CONVERT(CHAR(8), DATETIME, 10)
11 06/02/22 CONVERT(CHAR(8), DATETIME, 11)
12 060222 CONVERT(CHAR(6), DATETIME, 12)
13 22 Feb 2006 16:26:08:020 CONVERT(CHAR(24), DATETIME, 13)
14 16:26:08:037 CONVERT(CHAR(12), DATETIME, 14)
20 2006-02-22 16:26:08 CONVERT(CHAR(19), DATETIME, 20)
21 2006-02-22 16:26:08.037 CONVERT(CHAR(23), DATETIME, 21)
22 02/22/06 4:26:08 PM CONVERT(CHAR(20), DATETIME, 22)
23 2006-02-22 CONVERT(CHAR(10), DATETIME, 23)
24 16:26:08 CONVERT(CHAR(8), DATETIME, 24)
25 2006-02-22 16:26:08.037 CONVERT(CHAR(23), DATETIME, 25)
100 Feb 22 2006 4:26PM CONVERT(CHAR(19), DATETIME, 100)
101 02/22/2006 CONVERT(CHAR(10), DATETIME, 101)
102 2006.02.22 CONVERT(CHAR(10), DATETIME, 102)
103 22/02/2006 CONVERT(CHAR(10), DATETIME, 103)
104 22.02.2006 CONVERT(CHAR(10), DATETIME, 104)
105 22-02-2006 CONVERT(CHAR(10), DATETIME, 105)
106 22 Feb 2006 CONVERT(CHAR(11), DATETIME, 106)
107 Feb 22, 2006 CONVERT(CHAR(12), DATETIME, 107)
108 16:26:08 CONVERT(CHAR(8), DATETIME, 108)
109 Feb 22 2006 4:26:08:067PM CONVERT(CHAR(26), DATETIME, 109)
110 02-22-2006 CONVERT(CHAR(10), DATETIME, 110)
111 2006/02/22 CONVERT(CHAR(10), DATETIME, 111)
112 20060222 CONVERT(CHAR(8), DATETIME, 112)
113 22 Feb 2006 16:26:08:067 CONVERT(CHAR(24), DATETIME, 113)
114 16:26:08:067 CONVERT(CHAR(12), DATETIME, 114)
120 2006-02-22 16:26:08 CONVERT(CHAR(19), DATETIME, 120)
121 2006-02-22 16:26:08.080 CONVERT(CHAR(23), DATETIME, 121)
126 2006-02-22T16:26:08.080 CONVERT(CHAR(23), DATETIME, 126)
127 2006-02-22T16:26:08.080 CONVERT(CHAR(23), DATETIME, 127)
130 24 ???? 1427 4:26:08:080PM CONVERT(CHAR(32), DATETIME, 130)
131 24/01/1427 4:26:08:080PM CONVERT(CHAR(25), DATETIME, 131)

mysql

SELECT LAST_INSERT_ID();

php

@mysql_insert_id();

mssql

select @@identity 



출처 : http://woolab.net/140121930250

php와 mssql 연동

1. freetds 설치
# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar xvfz freetds-stable.tgz
# cd freetds-0.82
# ./configure --prefix=/usr/local/freetds \
--with-tdsver=8.0 \
--disable-odbc \
--disable-debug \
--enable-dbmfix \
--enable-msdblib
# make
# make install

2. php 컴파일
# ./configure ...... --with-mssql=/usr/local/freetds
* error: Directory /usr/local/freetds is not a FreeTDS installation directory 오류
# cp /usr/local/freetds-0.82/include/tds.h /usr/local/freetds/include/
* error: Could not find /usr/local/freetds/lib/libtds.a|so 오류
# cp /usr/local/freetds-0.82/src/tds/.lib/libds.a /usr/local/freetds/lib/
# make
# make install
# /usr/local/apache2/bin/apachectl restart

3. 확인 및 설정
- phpinfo
> mssql 확인
- php.ini
> mssql.charset =  "UTF-8"

4. yum 설치
# yum install -y freetds php-mssql
# /etc/freetds.conf
> [mssql_database]
> host = xxx.xxx.xxx.xxx
> port = 1433
> tds version = 8.0
> client charset = UTF-8

5. 접속 확인
# tsql -H xxx.xxx.xxx.xxx -p 1433 -U db_user_name -P db_user_password
> locale is "en_US.UTF-8"
> locale charset is "UTF-8"
> 1> select * from table_name
> 2> go

6. php 테스트
<?
$db_conn=mssql_connect("mssql_database", "db_user_name", "db_user_password");
mssql_select_db("database_name", $db_conn);
$sql="select count(*) from table_name";
$rs=mssql_query($sql, $db_conn);
echo "result";
echo mssql_result($rs, 0, 0);
mssql_close($db_conn);
?>

'Dev > PHP' 카테고리의 다른 글

컴파일 오류시 대처하기  (0) 2011.05.13
php 컴파일에러  (0) 2011.05.13
FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13

 

FreeTDS 설치 (PHP와 MS-SQL 연동)


Apache + PHP 사용시 원격 MSSQL 데이터베이스에 접근 하는 방법중 FreeTDS를 이용한 방법이 있습니다.
설치법도 간단하고 간단한 설정법으로 한글깨짐현상도 해결할 수 있습니다.


[설치]
/usr/local/src#
 wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

/usr/local/src# tar xvfpz freetds-stable.tgz

/usr/local/src/freetds# ./configure 
--prefix=/usr/local/freetds 
--with-tdsver=8.0 
--disable-odbc 
--disable-debug 
--enable-dbmfix 
--enable-msdblib

/usr/local/src/freetds# make

/usr/local/src/freetds#
 make install


[참고]

mssql 2005 의 경우 --with-tdsver=8.0

mssql 2000 의 경우 --with-tdsver=8.0

mssql 7.0 의 경우 --with-tdsver=7.0

mssql 6.0 의 경우 --with-tdsver=4.2

 

configure 단계에서 'Directory /usr/local/freetds is not a FreeTDS installation directory' 라는 메시지가 나올경우
# cp /usr/local/src/freetds/include/tds.h /usr/local/freetds/include/
또는
# cp /usr/local/src/freetds/src/tds/.libs/tds.h /usr/local/freetds/include/
tds.h 파일을 설치된 디렉토리에 복사한다.


[설치 계속]

freetds.conf 파일에 client charset=EUC-KR을 추가하여 한글깨짐 현상을 막을 수 있습니다..
( /usr/local/freetds/etc/freetds.conf )

[global]
client charset = EUC-KR


PHP 설치

/usr/local/src/php# ./configure 
--prefix=/usr/local/php 
--with-apxs2=/usr/local/bin/apxs
--with-sybase=/usr/local/freetds
--with-mssql=/usr/local/freetds    <- 하단 참고사항 확인


/usr/local/src/php# make
/usr/local/src/php# make install

[참고] php 5.X --with-mssql 오류시 해결 방안  

php 5.X에서 mssql연동을 위해 freetds를 설치할 경우에  php configure에 --with-mssql=/usr/local/freetds로 주었을때 해당 경로에 설치가 되어있음에도 불구하고 해당 경로에 설치가 되어있지 않다고 나오는 경우가 발생합니다.

에러 메세지
error Directory /usr/local/freetds is not a FreeTDS installation directory

해당 문제는 tds.h, libtds.a가 해당 설치경로에 있지 않아 설치되어 있는데도 설치되어 있지 않은것으로 인식되는 문제로 보입니다.

아래와 같이 해당 파일들을 경로로 복사해 주면 문제가 해결 됩니다.

cp /usr/local/src/freetds-xxx/include/tds.h /usr/local/freetds/include
cp /usr/local/src/freetds-xxx/src/tds/.libs/libtds.a /usr/local/freetds/lib

위와 같이 한 후에 make 과정중에 sysbase 오류가 발생한다면 configure 시에 --with-mssql과 --with-sybase를 같이 넣어 줍니다.


[참고 - PHP와 MS-SQL연동을 위해 odbc를 이용한 방법 - 오래된메뉴얼]
http://cafe.naver.com/webmas.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1000

 

 

[출처] 정상을 위한 독주2 (http://blueb.net/blog/1321) | 블루비

[추가/수정] 차동훈 (http://system.neulwon.com)

 

--------------------------------------------------------------------------------------

 

php - mssql 연동 테스트 소스

 

<?

$connection=mssql_connect("MyServer","msconn","msconn");
print ("db open");
mssql_connect($connection);
print ("db close");
$status = mssql_select_db("master",$connection);

if (!$status) {
$errNO = mssql_errno($connection);
$errMSG = mssql_errno($connection);

echo("데이터 베이스 연결 실패");
echo("에러메세지 $errNO : $errMSG");
exit;
}


$que = mssql_query("select * from sysfiles");
$row = mssql_fetch_row($que);

echo"

$row[0] $row[1] $row[2]";

echo"
성공";
?>

[발췌] Nugi's World | 야서누기 (http://blog.daum.net/evasuri/10243883)

'Dev > PHP' 카테고리의 다른 글

php 컴파일에러  (0) 2011.05.13
php mssql 연동 (freetds)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07

+ Recent posts