SPNote

SharePoint Notes

Attaching a Database where locates in a specific directory

I was trying to attach a SQL Database into local SQL Express and got an error “Unable to open the physical file. Operating system error 5. 5(Access is denied)”.  The reason is for the lack of permissions. The default data directory has Full control permission to MSSQL$SQLEXPRESS. If you want to attach a database in a different location then you should add the permission to that directory.

Error

  • Error occurred when attaching a database
    clip_image0019

    Unable to open physical file - Operating system error 5: 5(error not found) Microsoft SQL Server: Error 5120
    clip_image0029

 

Test environment

  • SQL Server version: 2014 Express
    image
  • Data Path(Default): C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA
  • Permission
    image
  • Service
    clip_image0048

    clip_image0067

Solution

  • Add Full control to MSSQL$SQLEXPRESS to the specific directory
    clip_image0078

 

When re-created an AD user or group permission is not working

[현상]

SharePoint 내 AD 의 도메인 그룹 혹은 사용자를 추가한 상태에서 해당 object 를 삭제하고 동일한 ID 로 다시 생성한 경우 접근을 할 수 없음

[점검 내역]

  1. 조직 구성
    image
    1. TestOU1
      1. TestOU1_Sub1
        1. TestOU1_Sub1_User1
        2. TestOU1_Sub1_User2
      2. TestOU1_Sub2
        1. TestOU1_Sub2_User1
        2. TestOU1_Sub2_User2
      3. TestOU1_User1
      4. TestOU1_User2
    2. TestOU2
      1. TestOU2_User1
      2. TestOU2_User2
  2. 사이트 구성
    1. extranet.spnote.com
      - TestOU1, TestOU2 도메인 그룹에 읽기 권한 추가
      1. TeamSite_OU1
        - TestOU1 도메인 그룹에 읽기 권한 추가
      2. TeamSite_OU2
        - TestOU2 도메인 그룹에 읽기 권한 추가
  3. 테스트
    1. 사용자 이동
      - 그룹: TestOU1_User2 를 TestOU2 로 이동 (정상 동작)
      - OU 만 이동 시 권한의 변화 없음 (그룹 간 이동이 아님)
      1. 이동 전
        clip_image001[9]
      2. 이동 후
        clip_image002[6]
    2. 사용자 삭제: TestOU1_User2
      - 재 인증 요청함
      clip_image003
    3. 사용자만 다시 추가: TestOU1_User2
      - 인증은 했으나 Access Denied 됨
      clip_image004[6]
      - TestOU1 그룹에 TestOU1_User2 추가 (정상 동작)
      clip_image005
    4. TestOU1 그룹 삭제
      clip_image006[6]
      - 접근 불가
      clip_image007[6]
    5. TestOU1 그룹 재 생성, 사용자 멤버 재 구성 후에도 접근 불가
      - 브라우저 재 시작해도 접근 불가
      - IIS 에서 App Recycle, Reset 해도 접근 불가
      image

      - User Profile compile 은 VM 에 구성되지 않아서 테스트 불가 (과거 운영에서 시도 시 되지 않았음)
      - The User Profile Replication Engine will not replicate distribution lists or security groups,
      but it will replicate site memberships (for example, My Sites)
      .

      - 관리자로 로그인하여 사이트 접근 권한 확인 시 접근 불가 상태 확인
      clip_image001[11]


[원인]

SharePoint 에서는 동일한 ID 의 계정이지만 내부에서 관리하는 SID(Security Identifier) 가 다르므로 다른 권한으로 인식하여 Object 가 다시 추가되더라도 접근을 할 수 없는 현상.

[해결]

  1. Migration 처리
    - AD Groups cannot be used to assign permissions in SharePoint
    - 재 생성된 사용자 혹은 그룹의 Migration 처리
    clip_image001[13]

    - SharePoint 내부 DB 에서 Guid 필드값이 업데이트 됨
    clip_image002
  2. 이후 정상 접속됨

 

 

[참고] 상세 테스트
- Domain Group, Domain Group 내
사용자, 직접 추가된 사용자 삭제

  1. 그룹 권한(TestOU1_Sub2)  삭제
    1. (#1) 그룹 권한(TestOU1_Sub2) 추가 시 레코드 추가됨
      clip_image001[15]
      - Domain Group 일 경우 Token 필드에, 그룹 내 사용자는 ExternalToken, ExternalTokenLastUpdated 필드에 값이 있음
    2. (#2) 그룹 내 사용자가 최초 로그인 시 레코드 추가됨
      -  TestOU1_Sub2_User2
    3. (#1) TestOU1_Sub2 그룹 삭제 시
      - TestOU1_Sub2_User2 접근 불가
      clip_image002[8]
      - DB 값 변화 없음
      clip_image003[6]
    4. (#1) TestOU1_Sub2 그룹 재 생성, 멤버 구성
      - 변화 없음 (3번과 동일함)
    5. Group Migration
      clip_image004
      - SystemID 변경 됨
      clip_image005[4]
    6. 정상 로그인 됨
  2. 그룹 권한(TestOU1_Sub2)  내의 AD 계정(TestOU1_Sub2_User2) 삭제
    - 변화 없음
    clip_image006[8]
    1. 페이지 접속 시 인증창 나타남
      - DB 값 변화 없음
      clip_image007
    2. AD Object 재 생성 및 TestOU1_Sub2 그룹에 멤버로 추가
    3. 정상 로그인 됨
      - SharePoint 에 추가된 그룹 내 사용자는 Migration 하지 않아도 재 인식
      - 사용자는 SharePoint 에 직접 추가된 것이 아님
    4. 기존 레코드의 tp_Deleted, tp_ExternalToken, ExternalTokenLastUpdated 값 변경되고 신규 레코드가 추가됨
      clip_image008[6]
  3. AD User (SID_Test2, 3) 삭제
    - TeamSite4 의 Members 그룹에 SID_Test2, SID_Test3 사용자 추가
    image
    - SID_Test2 는 삭제, SID_Test3 는 삭제 후 재 생성하고 MigrateUser 수행

    1. 두 계정 로그인 후
      image
    2. 두 계정 삭제 후
      - 접속 시 인증창 나타남
      image
      - DB 변화 없음
    3. AD User(SID_Test3) 만 다시 생성
      - 사이트 접속 시 Access Denied
      image
    4. User migration
      1. SID_Test2
        - 사용자 존재하지 않거나 유일하지 않다고 표시됨
        clip_image001[19]

        - 접속 시 인증창 나타남
        image
      2. SID_Test3
        - 정상 적용됨
        clip_image001[21]

        - 정상 로그인
        clip_image002[10]
      3. SharePoint 권한: 변화 없음
        image

Change Web Application Service Account

Configurations for changing a Web Application account are needed at many different locations including System, IIS, and Database. If you just changed an Application Pool identity directly from IIS, you may get an error message of “Cannot Connect to the configuration database.” So, I recommend you to use the method that SharePoint provides and will describe what SharePoint does when applying it.

How to change to a new account (SPNOTE\SP_PortalApp2) and what happened after applying it.

  1. Create a new account
    ex) SPNOTE\SP_PortalApp2 (current: SP_PortalApp)
    1. Create an account as a domain user
      clip_image001
      clip_image002
  2. Register the account as managed account and configure it for a Web Application Pool
    1. Move to Central Admin > Security > Configure managed accounts
      - Register as managed account
      clip_image003
    2. Move to Central Admin > Security > Configure service accounts
    3. Select a Web Application Pool and the new account (SP_PortalApp2)
      clip_image005
    4. Click OK
      - When you click OK, you will see this message. You should run “IISRESET /NOFORCE” on all servers in the farm. Application Pool for each Web App is changed automatically though. Refer to 3.3)
      clip_image006
  3. What has happened after applying it?
    - SharePoint automates various configurations to the System, IIS, and SQL Server
    1. The user has added into three groups
      - IIS_IUSRS, Performance Monitor Users, WSS_WPG
      clip_image007
    2. Application Pool Identity has changed
      clip_image008
    3. The Application Pool is recycled
      clip_image010
      clip_image012
    4. The user has added to related SharePoint databases (For my environment)
      - Owners: ProfileDB , SocialDB, SyncDB, WSS_Content_Intranet
      - WSS_Content_Application_Pools: SharePoint_AdminContent, SharePoint_Config, StateService
      # ex) WSS_Content_Intranet (http://intranet.spnote.dev)
      clip_image013
      * When you change the service account to another one ex) SP_PortalAppNew and delete from Managed Accounts, the SP_PortalApp2 still exists in WSS_Content_Intranet Database. This means SharePoint doesn’t delete the user(SP_PortalApp2) from the Database automatically.
  4. Access to the site (http://intranet.spnote.dev)
    1. I faced the error “Cannot Connect to the configuration database.”
      - At this time I didn’t run the IISRESET and you may notice all credentials must be updated. If you have multiple servers in a farm, then this PowerShell script may help you.
      clip_image015
    2. Run the IISRESET /NOFORCE
      clip_image016
    3. Access again
      - Fill account information
      clip_image018
      - It works fine
      clip_image020

Set Email Notification values on a UserProfile

In OOTB SharePoint 2010, all the three options for Email Notifications are checked. This may help customers for collaboration but some others may think that they receive lots of unnecessary emails and get annoyed. If your company size is big enough like me (30,000+), your IT department manager will make a request for disabling all or some of them.

The request was to disable the last option.

  • Uncheck “Send me suggestions for new colleagues and keywords”

After searching on this, I found out that there is a nice one using PowerShell but I couldn’t find the how the option value is saved because the value has changed to a different value when I save it into the UserProfile. In addition, I wanted to add some features such as examining values, applying multiple sites and saving some information into a log file.

The simple application looks like below.
image

At first, I thought updating the options for the UserProfile should be easy but if you tried some combinations, you will realize saved values are somehow different than the value should be.

You may think the option value will be saved like this
[V] Notify me when someone leaves a note on my profile
[V] Notify me when someone adds me as a colleague
[   ] Send me suggestions for new colleagues and keywords
=> option  value: 110

image
# Binary and Decimal values

Surprisingly, you will notice the Email Notification setting value is 100 (SP) instead of 110 (UI) when you read it from SharePoint. I could figure out after trying several times with combinations

Now I am going to explain how the value is saved.

  1. Without conversions – think the other way
    1. Checked: 0, Unchecked: 1
    2. Concatenate the option values in opposite order
      - Concatenate them in descending order (from 3 to 1)
      image
  2. Convert UI one (110) to SharePoint one (100)
    1. Reverse the each options
    2. Reverse characters
      image

The option value 110 (UI Version) is saved into 100 (SP Version) and I have no idea why the developer is saved it this way. You may find a method for doing this from SharePoint dlls(Please let me know if you find it).

Some tips from my exprience are

  1. SPSEmailOptins value is null (default)
    - The value null means 111 (all of them will be checked)
    - Check the value is null when you read the value
      You can read the value once you saved it.
  2. Login as farm administrator account
    - you can add another account at UserProfileServiceApplication > Administrators for testing.
    image
  3. Check if user exists from UserProfileManager
    - UserProfileManager.UserExists(accountName)

I had a hard time configuring My Site and testing this app. My Site configuration was hard and took some time. I will write an article about it later.

Install Windows Live Writer 2012 for BlogEngine

Come back to blogging again!!! The first thing I need to do is installing the Live Writer. The main reason I do it is for editing contents and inserting images easily.

One thing you should remember is that the address of “Remote posting web address for your blog” and the value sample is http://YourBlog/metaweblog.axd. Refer to Metaweblog API if you want to see the details.

Steps are below.

  1. What blog service do you use?
    image
  2. Add a blog account 
    image
  3. Select blog type 
    ex) http://www.spnote.com/metaweblog.axd
     image
    You can access with the URL and check it’s working
    image
  4. Select blog 
    image 
  5. Setting up your blog account
    image
  6. Download Blog Theme
    - I clicked OK
    image
  7. Set my blog nickname 
    image
  8. Now you’ve finished and ready to post
    image

.NET vs Windows 8

아침 출근하다 읽은 기사입니다.

.NET vs Windows 8 에 대한 개발자 경험과 생각입니다.
다행히도 .NET 개발자가 죽지는 않겠다는 것 같습니다.
Metro App 들이 얼마나 성황될지는 모르지만 HTML5 + JavaScript 는 새로운 주류가 될 것 같습니다.

인상적인 부분은 마지막 답글에서 Windows Mobile 이후 WP7 이 나올때 legacy support 가 없으면 개발자가 다치고 승질나서 떠나갈 수도 있다는 것을 MS 도 알거라는 내용이 있습니다.

딱히 개인소개 페이지가 없어서 어떠신 분인가 확인이 되지 않는 찰나에 Archives 에서 Inside Red Gate 가 보여서 들어가보았는데 Red Gate 에서 일하시는 분이 맞네요~(공신력 상승) DB 나 .NET 관련 툴 제작 회사이나 Reflector 를 산 회사로 많이? 알려졌습니다. 어디선가 일하기 좋은 100 대 기업에 속했다고 본 기억이 납니다. (아마도 영국내~ 그래도 부럽~~) 하지만, Reflector 의 유료화로 인해 개발자들이 기분이 좀 안 좋은 것 같습니다.

Cloud 전환 예(Netflix)

오늘 아침 본 기사인데, Netflix 라는 회사가 Cloud 로 전환하면서
겪게되는 이야기인 것 같습니다. (저도 출근 중에 읽어서 먼 소린지 잘 모름 ^^)
개발자 출신이 CEO 이고 임원들도 엔지니어들이다 보니 CIO 가 딱히 없다고 하네요~

기억나는 것은 아래와 같습니다.
1.    Hardware 부분은 Cloud 로
- 필요없어진 운영 인력을 절약?하는 무언가를 말하는 것 같음
2.    기존 DB 도 Cloud 로 (처음엔 아마존의 SimpleDB 이젠 아파치의 카산드라)
- 카산드라 전문가가 기존의 스키마를 어떻게 적용해야할지 개발자에게 가르쳐준다는 듯…
3.    Cloud 로 변화하면서 겪는 고통과 해결?

시스템이 다르다보니(Not windows) 읽기가 쉽지 않은 것 같습니다.
고유한 단어들도 보이고… 여튼, 시간날때 사전 준비하시고 읽어보세요~

The last free version of .NET Reflector (Ver 6.8)

Finally I got a free Reflector Ver 6 after I register with a key from Red-Gate. The redgate posted a message that It will not expire or force you to update for this version. I've used it for around one month and I haven’t got any disturbing messages yet.

You can register by using the link on the Disassembler window or help menu. You will get received an email with a serial key as soon as you register it. (This serial key can be used to active up to 5 machines.)
   
image

Unfortunately there is no separate download link for this version. Only available to existing users of the free edition and the update mechanism will update to the 6.8 version. I cannot guarantee you all things work well so your reflector may be upgrated to version 7.

[2011.07.27]
I sent the my reflector folder(contains files) (Ver 6.8) to one of my colleagues and she executed it then activation / registration window popped up so she could register using the register button. Look for the version 6.8 near around you then you will get the last free version.

Visual Studio Regular Expression

최근 Cross Browser 의 요구에 따른 작업을 하던 중 IE 가 아닌 타 브라우저 처리를 위한 작업을 하던 중 페이지 내에서 특정 태그와 그 내용을 지워야하는 상황이 발생했었습니다. 사실 한두개 바꾸는 거라면 다른 옵션은 신경도 쓸 필요가 없겠지만, 약 100 개의 페이지 정도 되는 상황이라면 무언가 이 단순한 작업을 처리해 줄 도구들을 찾기 마련입니다.

이 작업을 해소하기 위해 Visual Studio 에서도 Find and Replace 메뉴에서 정규 표현식 사용하면 되겠거니 하면 후회하실 수도 있습니다. 그 이유는 여기서 사용하는 정규 표현식은 일반적인 것과는 다릅니다. 물론, 아래의 참고 링크들을 숙지하고 정규 표현식에 지식이 조금 있는 분이시면 VS 의 OOTB 로 해결하면 됩니다. 저는 이런 상황에 직면할때마다 기왕이면 시간 좀 들여서 좀 더 세련된 방법이나 좋은 방법을 배우고 적용하고 싶지만 여유를 주지 않는 업무 환경이 처리를 단순하게 하는 것 같아 안타깝습니다. 사실, VS 보다는 Office 를 주로 켤때면 암울합니다.

VS IDE Regular Expressions 와 Standard  regex 와의 비교입니다.
(codinghorror.com 에서 가져옴 – 원문 링크)

  Visual Studio IDE Standard
Any single character . .
Zero or more * *
One or more + +
Beginning of line ^ ^
End of line $ $
Beginning of word < (no equivalent)
End of word > (no equivalent)
Line break \n \n
Any character in set [ ] [ ]
Any character not in set [^ ] [^ ]
Or | |
Escape special char \ \
Tag expression { } ( )
C/C++ identifier :i ([a-zA-Z_$][a-zA-Z0-9_$]*)
Quoted string :q (("[^"]*")|('[^']*'))
Space or Tab :b [ |\t]
Integer :z [0-9]+


어쨌든, aspx 페이지의 내의 object 태그를 없애는데 손쉽게 사용할 수 있는 것들을 찾아보던 중 VS 에 AddIn 되는 것과 Application 의 형태로 판매되는 것들이 있는 것을 확인했습니다. 우선 공짜이기도 하지만 VS 의 Find and Replace 처럼 수정된 내용도 Editor 내에서 볼 수 있고 원하는대로 수정을 할 수 있는 RegExAddin 을 사용하기로 했습니다. 
  - Link: .NET Regular Expressions Find and Replace Add-In for Visual Studio 2008 (VS 2010 은 아직 없음)
  - For VS 2003: Standard Regular Expression Searcher Addin For VS.NET 2003

# 사용 예 (object 태그 제거, 잘 변경되었는지 보기 위해 열어놓기 체크)
image

파일이 아닌 TEXT 작업을 위해서는 Expresso 를, 파일 수정 및 좀 더 다양한 작업을 위해서는 RegexBuddy(상용: $39.95) 를 추천합니다. 저는 공짜인 Expresso 를 사용합니다.

# RegexBuddy Screenshot
- 상용이라서 그런지 꽤 좋아 보입니다.

# Expresso Screenshot
image

평소에는 정규 표현식과 친근하지는 않지만 문자열 처리 등에서는 아주 효율적이라고 생각하기에 공부의 필요성은 느끼지만 안타깝게도 책은 책꽂이에 모셔두고 있습니다. (혹시 정규 표현식을 잘 쓰시는 분이 계시만 친하게 지내고 싶습니다. )

SharePoint 2010 이 Deploy 되면 Delegate Control 을 잘 활용하면 되겠지만, 타 시스템(게시나 결재) 등에서도 활용할 수 있는 컨트롤을 제작하는 것도 좋을 것 같습니다.

[참고 링크]
1. VS 의 Find and Replace 의 Regular Expression 초보 팁 1
2. VS 의 Find and Replace 의 Regular Expression 초보 팁 2
3. VS 의 Find and Replace 의 Regular Expression 초보 팁 3
4. 정규 표현식 추천 책

My SharePoint 2010 books

Two month ago, I requested buying three SharePoint 2010 books to my company and I could get one of them today and it is Professional SharePoint 2010 Administration. As a SharePoint Developer + Administrator, I need to handle admin stuff as well. In SPS 2003, the main admin jobs are setting IIS and watching logs. I expect it will be much harder and need to study more on SharPoint 2010 administration.

Even though I could download many white papers and documents from Microsoft but they are too plenty and I can't get the general or wide categories with easy access like reference books on my shelf. So I'm happy for it and two books are coming up soon.

The three books I've chosen are below

Book Image Description

Inside Microsoft SharePoint 2010 by Ted Pattison, Andrew Connell, Scot Hillier and David Mann

Developer book. I'm fan of Ted since the book Inside Microsoft Windows SharePoint Services 3.0 which I learned so much from the book when I developed on MOSS 2007.

Professional SharePoint 2010 Administration by Todd Klindt, Shane Young and Steve Caravajal

Admin book. I should read all and study it with Powershell. I also owned Windows Powershell in Action.

Microsoft SharePoint 2010 End User Guide: Business Performance Enhancement by Peter Ward and Michael McCabe

End user book. One of my tasks is showing users how to use SharePoint well and make them collaborate with team members and colleagues. When I was a completely developer, I could only see the developer perpective that I made applications without considering users. Fow now, I found out the Great application must be designed for users first!!! Anyways, I should understand many features of SharePoint and give them its full fuctionality and empower their daily businnes more easily with SharePoint.

I'll put notes as I read and study them.